语法:函数声明中的单个语句

ove*_*ore 9 c syntax

在C编程语言中,可以在单个语句的情况下省略代码块,例如:

if(1) exit();
Run Code Online (Sandbox Code Playgroud)

现在,这只适用于条件吗?为什么这在函数的情况下无效:

void f(int a) exit();
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 19

这是C语法的一个特性.在BNF中,函数定义就像

FUNC_DEF ::= TYPE IDENTIFIER "(" PARAM_LIST ")" BLOCK
Run Code Online (Sandbox Code Playgroud)

而声明是

STATEMENT ::= (EXPRESSION | DECLARATION | CONTROL | ) ";" | BLOCK
BLOCK ::= "{" STATEMENT* "}"
Run Code Online (Sandbox Code Playgroud)

(简化为允许混合声明和语句,C++允许但C不允许)和if声明

CONDITIONAL ::= "if" "(" EXPRESSION ")" STATEMENT
Run Code Online (Sandbox Code Playgroud)

暂时省略该else部分.

这样做的原因是,否则,您可以编写该函数

void no_op() {}
Run Code Online (Sandbox Code Playgroud)

void no_op();
Run Code Online (Sandbox Code Playgroud)

但后一种语法已被用于表示声明.