在C编程语言中,在单个语句的情况下可以省略代码块,例如:
if(1) exit();
现在,这仅适用于条件限制吗? 为什么这在函数的情况下无效:
void f(int a) exit();
答案 0 :(得分:19)
这是C语法的一个特性。在BNF中,函数定义类似于
FUNC_DEF ::= TYPE IDENTIFIER "(" PARAM_LIST ")" BLOCK
虽然陈述是
STATEMENT ::= (EXPRESSION | DECLARATION | CONTROL | ) ";" | BLOCK
BLOCK ::= "{" STATEMENT* "}"
(简化允许混合声明和语句,C ++允许但C不允许)和if
语句
CONDITIONAL ::= "if" "(" EXPRESSION ")" STATEMENT
暂时省略else
部分。
原因是这样的,否则,您可以编写函数
void no_op() {}
作为
void no_op();
但后一种语法已被用于表示声明。
答案 1 :(得分:4)
条件语句的语法是:
if(expression) statement
复合陈述是一种陈述。
compound statement
定义为
{ zero or more statements }
函数定义的语法是这个
function_declaration compound_statement
因此,根据定义,函数体必须是复合语句并且具有{}
QED :)
答案 2 :(得分:1)
有一种非常古老的C语言,即K& R C.在这种方言中,函数声明可能如下所示:
fun_a(a,b)
char a;
float b;
{
fun_b(b,a);
}
我认为在没有{
和}
的情况下解析它会太难。