Statements
语句是C程序中按顺序执行的片段。任何函数的主体都是一个复合语句,而复合语句本身又是语句和声明的序列:
int main(void) { // 复合语句开始 int n = 1; // 声明(非语句) n = n+1; // 表达式语句 printf("n = %d\n", n); // 表达式语句 return 0; // 返回语句 } // 复合语句结束,函数体结束
存在五种类型的语句:
|
可将 属性说明符序列 ( attr-spec-seq )应用于无标签语句,此时(除表达式语句外)属性将应用于相应的语句。 |
(since C23) |
目录 |
标签
任何语句都可以通过在其前面加上名称和冒号来进行 标签化 。
attr-spec-seq
(可选)
(C23起)
标识符
:
|
(1) | ||||||||
attr-spec-seq
(可选)
(C23起)
case
常量表达式
:
|
(2) | ||||||||
attr-spec-seq
(可选)
(C23起)
default
:
|
(3) | ||||||||
任何语句(但非声明)都可以在前面带有任意数量的 标签 ,每个标签声明 identifier 为标签名称,该名称在所属函数内必须唯一(换言之,标签名称具有 函数作用域 )。
标签声明本身不产生任何效果,既不会改变控制流,也不会以任何方式修改后续语句的行为。
|
标签后必须跟随一条语句。 |
(C23前) |
|
标签可以单独出现而不必跟随语句。若标签在代码块中独立存在,其行为等同于后接 空语句 。 可选的 attr-spec-seq 会应用于该标签。 |
(C23起) |
复合语句
复合语句,或称 块 ,是由花括号括起的语句和声明序列。
{
语句
|
声明
...
(可选)
}
|
(C23前) | ||||||||
属性说明序列
(可选)
{
无标签语句
|
标签
|
声明
...
(可选)
}
|
(C23起) | ||||||||
复合语句允许将一组声明和语句组合成一个单元,该单元可在任何需要单个语句的地方使用(例如,在 if 语句或迭代语句中):
if (expr) // if语句开始 { // 代码块开始 int n = 1; // 声明 printf("%d\n", n); // 表达式语句 } // 代码块结束,if语句结束
每个复合语句都会引入其自身的 块作用域 。
在块内声明的具有自动 存储期 的变量初始化器及VLA声明符,会在控制流按顺序经过这些声明时执行,其执行方式如同语句:
表达式语句
一个表达式后跟分号即构成语句。
表达式
(可选)
;
|
(1) | ||||||||
属性说明序列
表达式
;
|
(2) | (自 C23 起) | |||||||
典型C程序中的大多数语句都是表达式语句,例如赋值或函数调用。
没有表达式的表达式语句被称为 空语句 。它常用于为 for 循环或 while 循环提供空函数体。也可用于在复合语句末尾或声明之前承载标签:
puts("hello"); // 表达式语句 char *s; while (*s++ != '\0') ; // 空语句
|
可选的 attr-spec-seq 可应用于该表达式。
后接
|
(since C23) |
选择语句
选择语句根据表达式的值在多个语句中选择其一执行。
属性说明序列
(可选)
(自 C23 起)
if
(
表达式
)
语句
|
(1) | ||||||||
属性说明序列
(可选)
(自 C23 起)
if
(
表达式
)
语句
else
语句
|
(2) | ||||||||
属性说明序列
(可选)
(自 C23 起)
switch
(
表达式
)
语句
|
(3) | ||||||||
迭代语句
迭代语句重复执行一条语句。
attr-spec-seq
(可选)
(C23起)
while
(
expression
)
statement
|
(1) | ||||||||
attr-spec-seq
(可选)
(C23起)
do
statement
while
(
expression
)
;
|
(2) | ||||||||
attr-spec-seq
(可选)
(C23起)
for
(
init-clause
;
expression
(可选)
;
expression
(可选)
)
statement
|
(3) | ||||||||
跳转语句
跳转语句无条件地转移流程控制。
attr-spec-seq
(可选)
(自 C23 起)
break
;
|
(1) | ||||||||
attr-spec-seq
(可选)
(自 C23 起)
continue
;
|
(2) | ||||||||
attr-spec-seq
(可选)
(自 C23 起)
return
expression
(可选)
;
|
(3) | ||||||||
attr-spec-seq
(可选)
(自 C23 起)
goto
identifier
;
|
(4) | ||||||||
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 6.8 语句和块 (p: 待定)
- C17 标准 (ISO/IEC 9899:2018):
-
- 6.8 语句和块 (页码: 106-112)
- C11 标准 (ISO/IEC 9899:2011):
-
- 6.8 语句和块 (页码: 146-154)
- C99标准(ISO/IEC 9899:1999):
-
- 6.8 语句和块(页码:131-139)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 3.6 语句
参见
|
C++ 文档
关于
语句
|