?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
執(zhí)行一個循環(huán)。
用作 while 循環(huán)的較短等價物。
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement |
---|
行為如下:
init_clause 可能是一個表達(dá)式或一個聲明
如果它是一個表達(dá)式,則在第一次評估cond_expression及其結(jié)果被放棄之前,它會被評估一次。
(C99)如果它是一個聲明,則它在整個循環(huán)體的范圍內(nèi),包括 init_clause 的剩余部分,整個 cond_expression,整個iteration_expression 和整個 loop_statement。在這個聲明中聲明的變量只允許存儲類auto
和register
存儲類。
cond_expression在循環(huán)體之前被評估。如果表達(dá)式的結(jié)果為零,則循環(huán)語句立即退出。
迭代表達(dá)式在循環(huán)體及其結(jié)果被丟棄后進(jìn)行計算。在評估迭代表達(dá)式之后,控制轉(zhuǎn)移到cond_expression。
init_clause,cond_expression和iteration_expression 都是可選的:
for(;;) { printf("endless loop!");}
loop_statement 不是可選的,但它可能是一個空語句:
for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // null statement
如果循環(huán)的執(zhí)行需要在某個點(diǎn)終止,則可以在 loop_statement 中的任何地方使用 break 語句。
在 loop_statement 中的任何地方使用的 continue 語句將控制轉(zhuǎn)移到 iteration_expression。
如果循環(huán)在其 cond_expression,iteration_expression 或 loop_statement 的任何部分中沒有可觀察的行為(I / O,易失性訪問,原子操作或同步操作),則具有無限循環(huán)的程序具有未定義的行為。這允許編譯器優(yōu)化所有不可觀察的循環(huán),而不會證明它們終止。唯一的例外是 cond_expression被省略或是一個常量表達(dá)式的循環(huán); for(;;)
總是一個無止境的循環(huán)。
與所有其他選擇和迭代語句一樣,for 語句建立塊范圍:在 init_clause,cond_expression 或 iteration_expression 中引入的任何標(biāo)識符超出了loop_statement之后的范圍。 | (自C99以來) |
---|
for
.
與 C ++不同,用作 loop_statement 的表達(dá)式語句建立了自己的塊范圍,與 init_clause 的范圍截然不同:
for (int i = 0; ; ) { long i = 1; // valid C, invalid C++ // ...}
使用 goto 可以輸入循環(huán)的主體。在這種情況下,init_clause 和 cond_expression 不會被執(zhí)行。
#include <stdio.h>#include <stdlib.h>enum { SIZE = 8 };int main(void){ int array[SIZE]; for(size_t i = 0 ; i < SIZE; ++i) array [i] = rand() % 2; printf("Array filled!\n"); for (size_t i = 0; i < SIZE; ++i) printf("%d ", array[i]); printf("\n");}
可能的輸出:
Array filled!1 0 1 1 1 1 0 0
C11 standard (ISO/IEC 9899:2011):
6.8.5.3 The for statement (p: 151)
C99 standard (ISO/IEC 9899:1999):
6.8.5.3 The for statement (p: 136)
C89/C90 standard (ISO/IEC 9899:1990):
3.6.5.3 The for statement