「C言語/前処理指令」の版間の差分
削除された内容 追加された内容
→事前定義済みマクロ定数: __func__ はマクロではなく、定義済識別子なのでマクロ定数の一覧からは削除。 タグ: 2017年版ソースエディター |
→事前定義済みマクロ定数: C11をベースに加筆。 タグ: 2017年版ソースエディター |
||
241 行
== 事前定義済みマクロ定数 ==
{{節スタブ}}
事前定義済みマクロ定数がある。▼
| url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
| title = C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x
| page=175, §6.10.8 ''Predefined macro names''
| publisher = ISO/IEC}}</ref>。
以下のサブクラスに記載されている定義済みマクロの値は、翻訳単位全体で一定です(ただし、__FILE__ と __LINE__ を除く<ref>__LINE__ はともかく、__FILE__ は翻訳単位全体に一定では?との当然の疑問がありますが、#line でファイル名を指令された場合に変わりえます。</ref>)<ref name="jtc1-sc22-wg14-n1570-6.10.8" />。
これらのマクロ名および定義された識別子は、#define または #undef 前処理指令の対象になってはなりません。その他の定義済みマクロ名は、先頭にアンダースコアを置き、その後に大文字または2つ目のアンダースコアを置きます<ref name="jtc1-sc22-wg14-n1570-6.10.8" />。
実装では、マクロ __cplusplus を事前に定義してはならず、また、標準のヘッダーでも定義してはならない<ref name="jtc1-sc22-wg14-n1570-6.10.8" />。
=== 必須マクロ ===
以下のマクロ名は、実装によって定義されるものとする<ref name="jtc1-sc22-wg14-n1570-6.10.8.1">{{cite book
| url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
| title = C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x
| page=175, §6.10.8.1 ''Mandatory macros''
| publisher = ISO/IEC}}</ref>。
;__DATE__
: 前処理翻訳ユニットの翻訳日:"Mmm dd yyyy "形式の文字
: ここで、月の名前はasctime関数で生成されたものと同じであり、ddの最初の文字は、その値が10未満の場合はスペース文字である。
: 翻訳の日付が得られない場合は、実装で定義された有効な日付を供給しなければならない。
; __FILE__
: 現在のソースファイルの推定名(文字列リテラル)
; __LINE__
: 現在のソース行の(現在のソースファイル内の)推定行番号(整数定数)
; __STDC__
: 適合する実装であることを示すための整数定数 1。
; __STDC_HOSTED__
:; ホスト実装の場合
:: 整数定数 1
:; そうでない場合(=フリースタンディング実装である場合)
:: 整数定数 0
; __STDC_VERSION__
: 準拠する仕様に応じた整数定数
:; C90 : 未定義
:; C95 : 199409L
:; C99 : 199901L
:; C11 : 201112L
:; C17 : 201710L <!--C17は、ここぐらいしか変わってない-->
; __TIME__
: 前処理翻訳ユニットの翻訳時刻:文字列リテラル
: asctime関数で生成された時間と同様に、"hh:mm:ss" 形式の文字列リテラル。
: 翻訳時刻が得られない場合は、実装で定義された有効な時刻を提供する。
=== 環境マクロ ===
以下のマクロ名は、実装によって条件付きで定義されています<ref name="jtc1-sc22-wg14-n1570-6.10.8.2">{{cite book
| url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
| title = C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x
| page=176, §6.10.8.2 ''Environment macros''
| publisher = ISO/IEC}}</ref>。
; __STDC_ISO_10646__
; __STDC_MB_MIGHT_NEQ_WC__
; __STDC_UTF_16__
; __STDC_UTF_32__
=== 条件付き機能マクロ ===
以下のマクロ名は、実装によって条件付きで定義されます<ref name="jtc1-sc22-wg14-n1570-6.10.8.2">{{cite book
| url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
| title = C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x
| page=177, §6.10.8.3 ''Conditional feature macros''
| publisher = ISO/IEC}}</ref>。
; __STDC_ANALYZABLE__
; __STDC_IEC_559__
; __STDC_IEC_559_COMPLEX__
; __STDC_LIB_EXT1__
; __STDC_NO_ATOMICS__
; __STDC_NO_COMPLEX__
; __STDC_NO_THREADS__
; __STDC_NO_VLA__
__STDC_NO_COMPLEX__ を定義する実装は、 __STDC_IEC_559_COMPLEX__ を定義してはならない。
----
{|class="wikitable"
▲|+ 事前定義済みマクロ定数一覧<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm N1653 Working draft changes for C99 preprocessor synchronization]</ref><ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#630 CWG Issue 630. Equality of narrow and wide character values in the basic character set]</ref>
!マクロ名!!意味
|-
|