C
C 语法

Statements

Statements

语句是按顺序执行的C程序的片段。任何函数的主体都是一个复合语句,而这个语句又是一系列的语句和声明:

int main(void) { // start of a compound statement int n = 1; // declaration (not a statement) n = n+1; // expression statement printf("n = %d\n", n // expression statement return 0; // return statement } // end of compound statement, end of function body

有五种类型的陈述:

1)复合陈述

2)表达式语句

3)选择陈述

4)迭代语句

5)跳转语句

标签

任何语句都可以标记,通过在语句本身之前提供一个名字后跟一个冒号。

identifier : statement(1)
case constant_expression : statement(2)
default : statement(3)

1)转到目标。

2)switch语句中的case标签。

3)switch语句中的默认标签。

任何语句(但不是声明)之前都可以有任意数量的标签,每个标签声明标识符是标签名称,在封装函数中它必须是唯一的(换句话说,标签名称具有函数范围)。

标签声明对其本身没有影响,不会改变控制流,或以任何方式修改后面的语句的行为。

复合语句

复合语句或是括号括起来的语句和声明序列。

{ statement | declaration...(optional) }(1)

复合语句允许将一组声明和语句分组到一个单元中,这些单元可用于预期单个语句的任何位置(例如,在if语句或迭代语句中):

if (expr) // start of if-statement { // start of block int n = 1; // declaration printf("%d\n", n // expression statement } // end of block, end of if-statement

每个复合语句都引入了自己的块范围。

具有自动存储持续时间的变量的初始值设定项在声明块内声明,VLA声明符在控制流按顺序通过这些声明时执行,就像它们是声明一样:

int main(void) { // start of block { // start of block puts("hello" // expression statement int n = printf("abc\n" // declaration, prints "abc", stores 4 in n int a[n*printf("1\n")]; // declaration, prints "1", allocates 8*sizeof(int) printf("%zu\n", sizeof(a) // expression statement } // end of block, scope of n and a ends int n = 7; // n can be reused }

表达式语句

一个表达式后跟一个分号是一个声明。

expression(optional) ;(1)

典型C程序中的大多数语句都是表达式语句,例如赋值或函数调用。

没有表达式的表达式称为空语句。它通常用于为for或while循环提供一个空的主体。它也可用于在复合声明结尾处或声明之前携带标签:

puts("hello" // expression statement char *s; while (*s++ != '\0') ; // null statement

选择语句

选择语句根据表达式的值在几个语句之一之间进行选择。

if ( expression ) statement(1)
if ( expression ) statement else statement(2)
switch ( expression ) statement(3)

1)if 陈述

2)如果语句带有else子句

3)切换语句

迭代报表

迭代语句重复执行语句。

while ( expression ) statement(1)
do statement while ( expression ) ;(2)
for ( init_clause ; expression(optional) ; expression(optional) ) statement(3)

1) while loop

2) do-while loop

3) for loop

跳转语句

跳转声明无条件传输流量控制。

break ;(1)
continue ;(2)
return expression(optional) ;(3)
goto identifier ;(4)

1)break语句

2) continue 语句

3)带有可选表达式的return语句

4)goto声明