首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

for loop

执行一个循环。

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

句法

for ( init_clause ; cond_expression ; iteration_expression ) loop_statement

?

?

说明

行为如下:

  • init_clause 可能是一个表达式或一个声明
    • 如果它是一个表达式,则在第一次评估cond_expression及其结果被放弃之前,它会被评估一次。
    • (C99)如果它是一个声明,则它在整个循环体的范围内,包括 init_clause 的剩余部分,整个 cond_expression,整个iteration_expression 和整个 loop_statement。在这个声明中声明的变量只允许存储类autoregister存储类。
  • cond_expression在循环体之前被评估。如果表达式的结果为零,则循环语句立即退出。
  • 迭代表达式在循环体及其结果被丢弃后进行计算。在评估迭代表达式之后,控制转移到cond_expression。

init_clause,cond_expression和iteration_expression 都是可选的:

代码语言:javascript
复制
for(;;) {
   printf("endless loop!");
}

loop_statement 不是可选的,但它可能是一个空语句:

代码语言:javascript
复制
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 的范围截然不同:

代码语言:javascript
复制
for (int i = 0; ; ) {
    long i = 1;   // valid C, invalid C++
    // ...
}

使用 goto 可以输入循环的主体。在这种情况下,init_clause 和 cond_expression 不会被执行。

代码语言:javascript
复制
#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");
}

可能的输出:

代码语言:javascript
复制
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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com