【发布时间】:2014-04-14 08:13:17
【问题描述】:
ISO C11 标准(我只能访问草稿版本,n1570.pdf)在 6.2.1.8 中声明(C99 标准中没有这样的段落):
作为一种特殊情况,类型名称(不是 标识符)被认为有一个范围开始于 放置在类型名称中将出现省略标识符的位置 是不是省略了。
我正在寻找对以下内容的任何解释:
1) 部分 (6.2.1) 的名称是“标识符范围”。这一段的措辞我不清楚:“类型名称范围”是一种范围,类似于,例如块范围,文件范围等?或者它是类型名称本身的范围(在这种情况下,另一个问题是没有名称的对象如何具有范围以及这种范围的可能用途是什么)。
2) 这个定义在哪里重要?更具体地说,如果将类型名称的范围更改为在相应类型名称完成后立即开始,那会产生什么影响?唯一可以跟在抽象声明符(=类型名称)中省略标识符之后的标记是几个括号和参数名称列表或数组维度(内部带有表达式),它们都不能引用所讨论的类型名称,因为有没有可参考的标识符。为什么不等到声明器完成?
【问题讨论】:
-
+1 您花时间剖析标准中的引用足以对此进行投票。
-
仅供参考:ISO/IEC 9899:2011 §6.2.1 ¶8 中的措辞与您引用的相同。
-
我不确定,但与
struct xyz { ... };相关的措辞是不是标识符声明的类型名称(struct xyz)?它将被认为具有从分号到封闭范围末尾的范围(如果它出现在任何函数之外,则为文件;如果它出现在函数内部,则为块)。 -
好吧,在这种情况下,
xyz的范围正好在{之前(或者在第二种情况下,在xyz之后),而有问题的措辞是指将在之后开始的范围'}'。下面提到 DR341 的 aswer 是我正在寻找的。感谢大家的帮助!
标签: c scope c99 language-lawyer c11