繁体   English   中英

语法:function 声明中的单个语句

[英]Syntax: Single statement in function declaration

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

if(1) exit();

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

void f(int a) exit();

这是 C 语法的一个特性。 BNF中, function 定义类似于

FUNC_DEF ::= TYPE IDENTIFIER "(" PARAM_LIST ")" BLOCK

而声明是

STATEMENT ::= (EXPRESSION | DECLARATION | CONTROL | ) ";" | BLOCK
BLOCK ::= "{" STATEMENT* "}"

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

CONDITIONAL ::= "if" "(" EXPRESSION ")" STATEMENT

暂时省略else部分。

这样做的原因是,否则,您可以编写 function

void no_op() {}

作为

void no_op();

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

  • 条件语句的语法是这样的:

     if(expression) statement
  • 复合语句是一个语句。

  • compound statement定义为

    { zero or more statements }
  • function 定义的语法是这样的

     function_declaration compound_statement
  • 因此,根据定义,function 主体必须是复合语句并具有{}

  • QED :)

有一个非常古老的方言 C,K&R C。 在这种方言中,function 声明可能如下所示:

fun_a(a,b)
char a;
float b;
{
        fun_b(b,a);
}

我认为如果没有{}就很难解析它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM