首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用_Alignas对齐结构构件

用_Alignas对齐结构构件
EN

Stack Overflow用户
提问于 2012-05-20 20:12:15
回答 1查看 1.6K关注 0票数 6

我想知道以下几点: C11中的新的C11对齐说明符是否适用于结构成员?

我一直这么认为,但仔细阅读N1570公共草案似乎表明,如果支持的话,对齐说明符不能出现在说明符-限定符列表中,这正是我所期望的。我读过几次语法,但不知道结构成员声明中应该如何允许_Alignas

然而,在我看来,标准的意图似乎是_Alignas应该适用于结构成员,因为关于_Alignas (第6.7.5节)的段落规定,“对齐属性不应在.位字段的声明中指定”。鉴于“位字段”一词在第6.7.2.1节中被定义为结构成员(确切的措辞:“这样的成员称为位字段”),我一直将这句话解释为含蓄地意味着允许非位字段成员对齐。

对现有实现的检查表明,Clang3.0和GCC 4.7都支持结构成员上的_Alignas,而没有抱怨(使用-pedantic)。Clang源代码从N1570复制相同的语法,但Parser::ParseSpecifierQualifierList允许对齐说明符;该函数确实包含一个TODO元素,该元素读取:

代码语言:javascript
复制
/// TODO: diagnose attribute-specifiers and alignment-specifiers.

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

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

编辑:相关语法规则如下:

代码语言:javascript
复制
// 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 )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-20 20:45:00

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

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

所以这个语义就是这个意思。如果正如您所说的语法形式规范遗漏了这一点(我没有检查),这是一个缺陷,您应该报告它。

编辑:查看了语法,在我看来,在specifier-qualifier-list的情况下,在6.7.2.1中缺少了alignment-specifier,而且第14段中的文本解释也是正确的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10676827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档