在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)
但后一种语法已被用于表示声明.
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |