c - ISO C90 禁止混合声明和代码 - 为什么

标签 c ansi c89

<分区>

Possible Duplicate:
Why was mixing declarations and code forbidden up until C99?

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

那么 - 为什么要这样规定?

最佳答案

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

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

{
    <declarations>
    <stmts>
}

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

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

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

关于c - ISO C90 禁止混合声明和代码 - 为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14632395/

相关文章:

c - ANSI C - 不使用数组替换空白字符

c - 指向结构的指针的 ANSI C 内存分配抛出非致命运行时错误

c - wchar_t 和多字节函数是 ANSI C 的一部分吗?

C 函数返回一个指向局部变量的指针

c - c 中的私有(private)信号量

c - 尝试将新值传递给指针数组

c - 防止 C 键盘输入中的 ANSI 转义字符

c - 寻找可以操纵编译器优化功能的宏

c - 通过 void** 将参数传递给函数

c - 如何消除结构体中的重复项,并使用 qsort 在 C 中对它们进行排序