非常教程

C参考手册

C 语法

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 都是可选的:

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

C 语法相关

1.#define directive
2.#elif directive
3.#else directive
4.#endif directive
5.#error directive
6.#if directive
7.#ifdef directive
8.#ifndef directive
9.#include directive
10.#line directive
11.#pragma directive
12.alignas
13.Alternative operators and tokens
14.Analyzability
15.Arithmetic operators
16.Arithmetic types
17.Array declaration
18.Array initialization
19.ASCII Chart
20.Assignment operators
21. types
22.Basic concepts
23.Bit fields
24.break statement
25.C language
26.C Operator Precedence
27.cast operator
28.character constant
29.Comments
30.Comparison operators
31.compound literals
32.Conditional inclusion
33.Conformance
34.const type qualifier
35.Constant expressions
36.continue statement
37.Declarations
38.do-while loop
39.Enumerations
40.Escape sequences
41.Expressions
42.External and tentative definitions
43.File scope
44.floating constant
45.Function declarations
46.Function definitions
47.Functions
48.Generic selection
49.goto statement
50.Identifier
51.if statement
52.Implicit conversions
53.Increment/decrement operators
54.Initialization
55.inline function specifier
56.integer constant
57.Lifetime
58.Logical operators
59.Lookup and name spaces
60.Main function
61.Member access operators
62.Memory model
63.Objects and alignment
64.Order of evaluation
65.Other operators
66.Phases of translation
67.Pointer declaration
68.Preprocessor
69.restrict type qualifier
70.return statement
71.Scalar initialization
72.Scope
73.sizeof operator
74.Statements
75.static assert declaration
76.Static storage duration
77.Storage-class specifiers
78.string literals
79.Struct and union initialization
80.Struct declaration
81.switch statement
82.Thread storage duration
83.Type
84.Type
85.Typedef declaration
86.Undefined behavior
87.Union declaration
88.Value categories
89.Variadic arguments
90.volatile type qualifier
91.while loop
92._Alignof operator
93._Noreturn function specifier
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。