©
本文档使用 PHP中文网手册 发布
执行一个循环。
用作 while 循环的较短等价物。
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement |
---|
行为如下:
init_clause 可能是一个表达式或一个声明
如果它是一个表达式,则在第一次评估cond_expression及其结果被放弃之前,它会被评估一次。
(C99)如果它是一个声明,则它在整个循环体的范围内,包括 init_clause 的剩余部分,整个 cond_expression,整个iteration_expression 和整个 loop_statement。在这个声明中声明的变量只允许存储类auto
和register
存储类。
cond_expression在循环体之前被评估。如果表达式的结果为零,则循环语句立即退出。
迭代表达式在循环体及其结果被丢弃后进行计算。在评估迭代表达式之后,控制转移到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
如果循环的执行需要在某个点终止,则可以在 loop_statement 中的任何地方使用 break 语句。
在 loop_statement 中的任何地方使用的 continue 语句将控制转移到 iteration_expression。
如果循环在其 cond_expression,iteration_expression 或 loop_statement 的任何部分中没有可观察的行为(I / O,易失性访问,原子操作或同步操作),则具有无限循环的程序具有未定义的行为。这允许编译器优化所有不可观察的循环,而不会证明它们终止。唯一的例外是 cond_expression被省略或是一个常量表达式的循环; for(;;)
总是一个无止境的循环。
与所有其他选择和迭代语句一样,for 语句建立块范围:在 init_clause,cond_expression 或 iteration_expression 中引入的任何标识符超出了loop_statement之后的范围。 | (自C99以来) |
---|
for
.
与 C ++不同,用作 loop_statement 的表达式语句建立了自己的块范围,与 init_clause 的范围截然不同:
for (int i = 0; ; ) { long i = 1; // valid C, invalid C++ // ...}
使用 goto 可以输入循环的主体。在这种情况下,init_clause 和 cond_expression 不会被执行。
#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