簡體   English   中英

為什么for循環中的i ++不使用“;”。 並非所有內容都必須以“;”結尾嗎?

[英]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 + 1i > 0 ,僅i一個,甚至i = 42等。 在一般情況下,所有這些都不需要尾隨分號,並且都可以用作更復雜表達式的子表達式。

C確實具有“語句表達式”的概念,其中表達式可用作語句(出於其副作用)。 在這種情況下,就像許多其他類型的語句一樣,該語句以分號結尾。 實際上,這些實際上在C代碼中確實很常見,因為賦值和函數調用是表達式,而由這些類型的表達式構成的表達式語句構成了大多數C代碼的主體。 但是,聲明不能被解釋為“一切”。

為什么不使用; 在for循環中的i++之后?

用最簡單的術語來說,這是因為該語言要求您不要這樣做。 關於我之前的評論,這是因為for語句的控制塊的第三子句需要表達式,而不是語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM