この付録では、現在 C コンパイラでサポートされている『Programming Language - C (ISO/IEC 9899:2011)』規格の機能について説明します。
-std=c11 フラグは、コンパイラによる 9899:2011 ISO/C の認識を制御します。-std フラグの構文の詳細については、–std=valueを参照してください。
_Alignas
_Alignof
_Noreturn
_Static_assert
_Thread_local
_Alignas 指定子
_Alignof 演算子
_Noreturn
_Static_assert
_Thread_local 記憶指定子
typedef 再定義の許可
無名構造体/共用体
UCN 文字セットの更新の許可
__STDC_ANALYZABLE__ マクロ
__STDC_NO_ATOMICS__ マクロ
__STDC_NO_THREADS__ マクロ
機能: 6.7.5 アライメント指定子
_Alignas ( type-name ) _Alignas ( constant-expression )
_Alignas 指定子は、typedef の宣言、ビットフィールド、関数、パラメータ、または register 記憶クラス指定子で宣言されたオブジェクトでは使用できません。
定数式は整数定数式に評価されます。定数式は、1 から 128 までの間の 2 のべき乗である整数定数式に評価される必要があります。有効な値は、0、1、2、4、8、16、32、64、および 128 です。この値は、宣言対象のオブジェクトまたはメンバーの型に必要なアライメントと同等かそれ以上に厳密なアライメントに評価される必要があります。
_Alignas ( type-name) は _Alignas (_Alignof (type-name)) と同義です。
アライメント指定子 0 には効果がありません。
有効なアライメントは、もっとも厳密なアライメント指定子のアライメントです。
アライメント指定子で宣言されたオブジェクトを指定するときには、そのオブジェクトのその他のすべての宣言で、同じアライメント指定子を使用するか、またはアライメント指定子を使用しないでおく必要があります。オブジェクトのアライメントは、同じオブジェクトを宣言するすべてのソースファイルで同一の方法で指定する必要があり、このように指定しないと動作が未定義になります。
機能: 6.5.3.4 _Alignof 演算子
_Alignof ( type-name )
_Alignof 演算子は、そのオペランドの型のアライメント要件を示す整数定数に評価されます。オペランドは評価されません。_Alignof 演算子を関数または不完全な型で使用することはできません。
機能: 6.7.4 関数指定子 _Noreturn
_Noreturn 指定子は、戻らない関数の宣言に次のように配置します。
_Noreturn void leave () { abort(); }
機能: 6.7.10 静的アサーション
_Static_assert ( constant-expression , string-literal ) ;
ISO/IEC 9899:2011 の Annex D により、UCN で文字セットの更新が許可されています。許可されているすべての文字の一覧については、ISO/IEC 9899:2011 Annex D を参照してください。