我知道 C99 允许声明与代码混合,不仅在开始时,而且我试图在 ISO/IEC 9899:1999 中找到它的编写位置 - 你能指出我应该搜索的部分吗?
提前致谢。
在(非规范性)转发中,第 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
答案在第 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
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