1

可能重复:
为什么在 C99 之前禁止混合声明和代码?

有一些与此警告相关的问题:ISO C90 forbids mixed declarations and code但它们没有首先解决为什么这是 C90 标准中的问题。

那么 - 为什么有这个规定?

4

1 回答 1

4

我知道的最大原因是它简化了语言语法和解析器。

有了前面的声明,代码块必须看起来像

{
    <declarations>
    <stmts>
}

因此, 的定义<stmts>被简化了,因为它不必涉及声明。这反过来又简化了解析器,因为它只需要在块的开头消除声明与声明的歧义。

事实上,代码块的这个特定定义已编入标准:

3.6.2 Compound statement, or block

Syntax

          compound-statement:
                  {  declaration-list<opt> statement-list<opt> }

          declaration-list:
                  declaration
                  declaration-list declaration

          statement-list:
                  statement
                  statement-list statement
于 2013-01-31T18:17:17.990 回答