?
This document uses PHP Chinese website manual Release
執(zhí)行一個(gè)循環(huán)。
用作 while 循環(huán)的較短等價(jià)物。
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement |
---|
行為如下:
init_clause 可能是一個(gè)表達(dá)式或一個(gè)聲明
如果它是一個(gè)表達(dá)式,則在第一次評(píng)估cond_expression及其結(jié)果被放棄之前,它會(huì)被評(píng)估一次。
(C99)如果它是一個(gè)聲明,則它在整個(gè)循環(huán)體的范圍內(nèi),包括 init_clause 的剩余部分,整個(gè) cond_expression,整個(gè)iteration_expression 和整個(gè) loop_statement。在這個(gè)聲明中聲明的變量只允許存儲(chǔ)類auto
和register
存儲(chǔ)類。
cond_expression在循環(huán)體之前被評(píng)估。如果表達(dá)式的結(jié)果為零,則循環(huán)語句立即退出。
迭代表達(dá)式在循環(huán)體及其結(jié)果被丟棄后進(jìn)行計(jì)算。在評(píng)估迭代表達(dá)式之后,控制轉(zhuǎn)移到cond_expression。
init_clause,cond_expression和iteration_expression 都是可選的:
for(;;) { printf("endless loop!");}
loop_statement 不是可選的,但它可能是一個(gè)空語句:
for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // null statement
如果循環(huán)的執(zhí)行需要在某個(gè)點(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),而不會(huì)證明它們終止。唯一的例外是 cond_expression被省略或是一個(gè)常量表達(dá)式的循環(huán); for(;;)
總是一個(gè)無止境的循環(huán)。
與所有其他選擇和迭代語句一樣,for 語句建立塊范圍:在 init_clause,cond_expression 或 iteration_expression 中引入的任何標(biāo)識(shí)符超出了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 不會(huì)被執(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