结构成员与_Alignas对齐

我想知道以下内容:C11中新的_Alignas对齐说明符适用于结构成员吗?

我总是假设那么多,但是对N1570公共草案的全面阅读似乎表明, 对齐指定符不能出现在说明符限定符列表中,如果它被支持的话,这是我期望的那样。 。 我已经阅读了几次语法,但无法弄清楚如何在结构成员声明中允许_Alignas

但是,在我看来,该标准的意图是_Alignas应该适用于结构成员,因为_Alignas (第6.7.5节)中的段落声明“在[…]的声明中不应指明对齐属性。 ]一个比特字段“。 鉴于术语“位字段”在第6.7.2.1节中定义为结构成员(精确措辞:“这样的成员称为位字段 ”),我总是将该句子解释为隐含意味着对齐说明符是允许非位字段成员。

检查现有实现表明,Clang 3.0和GCC 4.7都支持结构成员上的-pedantic而不会抱怨(使用-pedantic )。 Clang源代码从N1570再现相同的语法,除了Parser::ParseSpecifierQualifierList允许对齐说明符; 该函数确实包含一个TODO元素,其内容如下:

 /// TODO: diagnose attribute-specifiers and alignment-specifiers. 

GCC C解析器代码看似相似,即使它引用了标准语法,它允许在说明符限定符列表中使用对齐说明符。

我还检查了已知缺陷列表,以及comp.lang.c和comp.std.c,以查看是否已在那里提出主题,但似乎并非如此。 因此,我的问题是:结构成员应该允许对齐说明符吗?

编辑:相关的语法规则是:

 // Compare this... (6.7) declaration-specifiers: storage-class-specifier declaration-specifiers_opt type-specifier declaration-specifiers_opt type-qualifier declaration-specifiers_opt function-specifier declaration-specifiers_opt // This seems to be the only place that mentions // alignment-specifier on the rhs of a rule. alignment-specifier declaration-specifiers_opt (6.7.2.1) struct-or-union-specifier: struct-or-union identifier_opt { struct-declaration-list } struct-or-union identifier (6.7.2.1) struct-declaration-list: struct-declaration struct-declaration-list struct-declaration (6.7.2.1) struct-declaration: specifier-qualifier-list struct-declarator-list_opt ; static_assert-declaration // ...to this. (6.7.2.1) specifier-qualifier-list: type-specifier specifier-qualifier-list_opt type-qualifier specifier-qualifier-list_opt // Missing alignment-specifier specifier-qualifier-list_opt? (6.7.5) alignment-specifier: _Alignas ( type-name ) _Alignas ( constant-expression ) 

第6.7.5节,第6页明确规定,这也涉及成员的一致性

声明的对象或成员的对齐要求被视为指定的对齐方式。

所以预期的语义就是那个。 如果正如你所说,语法的正式规范错过了那一点(我没有检查),这是一个缺陷,你应该报告它。

编辑:查看语法,在我看来,在specifier-qualifier-list的情况下,在6.7.2.1中添加了alignment-specifier ,并且第14段中的文本解释也是有序的。