3

我知道 C99 允许声明与代码混合,不仅在开始时,而且我试图在 ISO/IEC 9899:1999 中找到它的编写位置 - 你能指出我应该搜索的部分吗?

提前致谢。

4

3 回答 3

5

在(非规范性)转发中,第 xii 页中提到了该更改,称为“混合声明和代码”。(恕我直言,声明“代码”;它应该说“混合声明和声明”。)

它在 6.8.2中的复合语句的语法中定义:

compound-statement:
    { block-item-list[opt] }
block-item-list:
    block-item
    block-item-list block-item
block-item:
    declaration
    statement

C89/C90标准中对应的语法是:

compound-statement:
    { declaration-list[opt] statement-list[opt] }
declaration-list:
    declaration
    declaration-list declaration
statement-list:
    statement
    statement-list statement
于 2012-12-13T19:56:07.297 回答
2

答案在第 6.8.2 条中:

block-item: declaration
            statement

Ablock-item可以是声明或声明,它们不需要按特定顺序排列:

compound-statement:
                    { block-item-list_opt }
block-item-list: block-item
                 block-item-list block-item
于 2012-12-13T19:56:14.483 回答
2

C 1999 6.8.2 两个说复合语句是“{”、可选的块项目列表和“}”,并且块项目列表是块 = 项目或另一个块项目-list 和块项,并且块项是声明或语句。因此,声明可以是复合语句中的任何块项。反过来,6.8 说复合语句可以出现在语句可以出现的任何地方。此外,6.9.1 说函数定义的主体是复合语句。

compound-statement:
    { block-item-list[opt] }

block-item-list:
    block-item
    block-item-list block-item

block-item:
    declaration
    statement
于 2012-12-13T19:56:29.477 回答