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

时间:2011-07-07 14:37:42

标签: c syntax

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

if(1) exit();

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

void f(int a) exit();

3 个答案:

答案 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);
}

我认为在没有{}的情况下解析它会太难。