在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)
但后一种语法已被用于表示声明.