【发布时间】:2012-12-13 19:44:13
【问题描述】:
我知道 C99 允许声明与代码混合,不仅在开头,而且我试图找到它在 ISO/IEC 9899:1999 中的编写位置 - 你能指出我的部分吗?应该搜索吗?
提前致谢。
【问题讨论】:
我知道 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
block-item 可以是声明或声明,它们不需要按特定顺序排列:
compound-statement:
{ block-item-list_opt }
block-item-list: block-item
block-item-list block-item
【讨论】:
C 1999 6.8.2 两个说复合语句是“{”、一个可选的块项目列表和一个“}”,并且块项目列表是块 = 项目或另一个block-item-list 和一个 block-item,而 block-item 是一个声明或语句。因此,声明可以是复合语句中的任何块项。反过来,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
【讨论】: