簡體   English   中英

結構成員與_Alignas對齊

[英]Structure member alignment with _Alignas

我想知道以下內容:C11中新的_Alignas對齊說明符適用於結構成員嗎?

我總是假設那么多,但是對N1570公共草案的全面閱讀似乎表明, 對齊指定符不能出現在說明符限定符列表中,如果它被支持的話,這是我期望的那樣。 。 我已經閱讀了幾次語法,但無法弄清楚如何在結構成員聲明中允許_Alignas

但是,在我看來,該標准的意圖是_Alignas應該適用於結構成員,因為_Alignas (第6.7.5節)中的段落聲明“在[......的聲明中]不應指明對齊屬性。 ]一個比特字段“。 鑒於術語“位字段”在第6.7.2.1節中被定義為結構成員(精確的措辭:“這樣的成員稱為位字段 ”),我總是將該句子解釋為隱式意味着對齊說明符是允許非位字段成員。

檢查對現有實現表明,無論鏘3.0和4.7 GCC支撐_Alignas上結構構件而不抱怨(與-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段中的文本解釋也是有序的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM