与_Alignas结构成员对齐(Structure member alignment with _A

2019-09-17 08:32发布

我想知道以下几点:在新的_Alignas在C11对齐方式说明适用于结构体成员?

我一直认为多,但N1570公开草案进行彻底的阅读似乎表明, 对齐说明符不能出现在一个符限定符列表中 ,这是我希望它是,如果它支持。 我读过语法几次,但无法弄清楚如何_Alignas应该在结构成员声明被允许。

然而,在我看来,该标准的目的是_Alignas应适用于结构成员的段落_Alignas (第6.7.5)指出,“对齐属性不得在[声明中指定... ]位字段”。 鉴于“位字段”一词在§6.7.2.1被定义为一个结构成员(准确的措词:“这样的成员称为位域 ”),我一直理解这句话隐含的意思是定位符分别为允许非位字段成员。

检查对现有实现表明,无论锵3.0和4.7 GCC支撑_Alignas上结构构件而不抱怨(与-pedantic )。 铛源代码再现该语法从N1570,除了Parser::ParseSpecifierQualifierList允许对准说明符; 该函数包含TODO元素,不过,内容如下:

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

海湾合作委员会ç解析器代码看起来是相似的,即即使它引用的标准语法,它允许定位符的说明符限定符列表。

我还检查了已知的缺陷列表,以及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 )

Answer 1:

节6.7.5,第6页,明确规定,这也涉及部件的对准

声明的对象或部件的对齐要求被取为指定的对齐。

因此,预期的语义是一个。 如果像你说的语法的正式规范遗漏了一点(我没有检查),这是一个缺陷,你应该报告。

编辑:展望语法,在我看来,一个另外的alignment-specifier在6.7.2.1中缺少的情况下, specifier-qualifier-list ,并在第14段的文字解释是为了。



文章来源: Structure member alignment with _Alignas
标签: c standards c11