[英]Why “;” is not used for i++ in a for loop. Doesn't everything have to end with “;”?
為什么不使用;
在for循環中的i++
之后?
考慮,
for (int i= 0; i < 50; i++) {
}
在這種情況下為什么人們不加;
在i++
?
如果你寫了i++
,你會需要把一個獨立的聲明;
之后。
void foo(int i)
{
i++ // syntax error, missing ';'
}
但是,您無需在for
循環標題中的第三個表達式之后放置分號,因為可以用括號將其結尾。 這是一個關於規則for
,不是一個關於規則++
。 無論您在for
循環標頭中放入什么內容,都應在第三個表達式后加上一個圓括號,而不要使用分號。
for (listnode *p = list_head; *p; p = p->next) // correct
因為它在for循環中。 for循環的形式為:
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement
i++
是一種表達。 i++;
是一個聲明。
在這種情況下為什么人們不加; i ++的背后?
由於語言語法不允許:
for ( expressionopt ; expressionopt ; expressionopt ) statement
在for
循環的控制部分中, ;
用作三個(可選)表達式之間的分隔符 ,而不用作語句終止符。
這就是構造for循環的方式,這與許多其他語言相同。 for循環有3個選項,以;
分隔;
。 第一個選項是初始語句,通常可以在其中初始化計數器,但是可以在此處添加其他內容,
而可以使用,
來分隔它們。 這是一個例子:
(int i = 0, int k = 100; i < k; i++, k--)
而且你沒有;
在i++
出於相同的原因,方法參數中沒有它。 例如,你不能寫while(true;)
表達式和語句之間有區別。 例如,以下內容被視為表達式:
i++
而以下內容被視為表達式語句:
i++;
由於該標准指定for
循環的語法為:
for ( expression(opt) ; expression(opt) ; expression(opt) ) statement
添加分號將是語法錯誤;
在第三個表達式之后,因為這會使它成為一條語句,但是期望的是一個可選表達式。
注意: opt
表示可選。
為什么在C語言的i ++中不使用“;”。 難道不是所有事情都以“;”結尾嗎?
不,“一切”都不以分號結尾。 大多數語句和所有聲明都以分號結尾,但是i++
是一個表達式 。 即,它表示產生值的運算。 它也有副作用與該分析無關。 其他表達式包括i + 1
, i > 0
,僅i
一個,甚至i = 42
等。 在一般情況下,所有這些都不需要尾隨分號,並且都可以用作更復雜表達式的子表達式。
C確實具有“語句表達式”的概念,其中表達式可用作語句(出於其副作用)。 在這種情況下,就像許多其他類型的語句一樣,該語句以分號結尾。 實際上,這些實際上在C代碼中確實很常見,因為賦值和函數調用是表達式,而由這些類型的表達式構成的表達式語句構成了大多數C代碼的主體。 但是,聲明不能被解釋為“一切”。
為什么不使用
;
在for循環中的i++
之后?
用最簡單的術語來說,這是因為該語言要求您不要這樣做。 關於我之前的評論,這是因為for
語句的控制塊的第三子句需要表達式,而不是語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.