C
C 语法

for loop

for 循环

执行一个循环。

用作 while 循环的较短等价物。

句法

for ( init_clause ; cond_expression ; iteration_expression ) loop_statement

说明

行为如下:

  • init_clause 可能是一个表达式或一个声明

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):