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声明