2014-03-03 24 views
2

根據C89/C90標準,是否可以在for語句的increment子句中插入一段代碼?C89 - for循環增量子句中的代碼塊

例如:的

int x = 0, y; 
for (y = 0; x + y < SOME_CONST; { y++; x++; }) 
{ 
    //code 
} 

代替:

int x = 0, y; 
for (y = 0; x + y < SOME_CONST; x++) 
{ 
    y++; 
    //code 
} 

我只知道到目前爲止,它不會與Microsoft C/C++編譯器的工作,但到底是什麼標準說?

那麼初始化子句呢?我可以在那裏放一塊代碼嗎?

回答

3

用於C89的for迭代語句語法是

for(表達選擇;表達選擇;表達選擇)語句

表達選擇或者是一個表達或省略:例如for (;;);有效C。簡單地說,{y++; x++;}表達選擇而是它是一個聲明。所以它不能用在for循環中。類似於x++, y++的是表達式,其值可以是前一個值y

在C的更新版本,所述第一表達選擇被增強以一個子句其允許像for (int a...代碼。但是這是而不是在C89中有效。但代碼如for (x = 1, y = 2;有效,因爲x = 1, y = 2表達式

+0

因此,我可以初始化爲 (x = y = 0 ... ? –

+2

@NahuelPrieto的確可以:'x = y = 0'是一個*表達式opt *,其值爲'0'。 – Bathsheba

+1

I don不認爲有什麼叫做「表達式」。您正在閱讀的語法可能是一個源代碼的錯誤OCR或pdftotext轉換,它將「表達式」與「opt」作爲下標表示它是可選的。我責怪標準人士仍然在21世紀使用死樹格式... –

2

你不能做一個「塊」的代碼,但你可以用逗號分隔語句。例如,

int x = 0, y; 
for (y = 0; x + y < SOME_CONST; y++, x++) 
{ 
    //code 
} 
+0

哇,非常有趣,並且是for循環的獨佔語法還是從其他地方繼承? –

+1

任何表達式中的事物之間都可以有逗號。 – doctorlove

+1

爲了一致性:'for(x = y = 0; x + y