C言語に存在する事前定義マクロの一覧です。本編の解説に合わせて、C99 をベースにして作成しており、それより前のバージョンでの事情を無視しています。
事前定義マクロは、処理系があらかじめ定義しているマクロです。何かしらのヘッダファイルをインクルードするといった準備が不要で、いつでも使用可能になっています。ただし、標準規格によって必ず定義しなければならないと定められているものと、条件付きで定義されるものとがあります。
#undef を使って無効化することはできません[1]。
事前定義マクロについては第29章で取り上げています。
なお、__STDC_
ではじめる名前(後ろのアンダースコアは1つ)は、将来の規格であらたな事前定義マクロを追加するために予約されています。
ここに掲載する事前定義マクロは、標準規格によって必ず定義するルールになっています。
名前 | 概要 | 解説章 |
---|---|---|
__FILE__ | ソースファイルの名前の文字列リテラルに置換される(#line の影響を受ける) | 第29章 |
__LINE__ | ソースファイルの行数の整数定数に置換される(#line の影響を受ける) | 第29章 |
__DATE__ | コンパイル時の日付に置換される | 第29章 |
__TIME__ | コンパイル時の日時に置換される | 第29章 |
__STDC__ | 標準規格に準拠していれば 1 に置換される |
第29章 |
__STDC_VERSION__ | 標準規格のバージョンを表す値に置換される | 第29章 |
__STDC_HOSTED__ | ホスト処理系では 1 、それ以外では 0
に置換される |
第29章 |
__STDC_MB_MIGHT_NEQ_WC__ | 基本文字セットの文字x に対して、'x' == L'x' が false
になる場合がある処理系で 1 に置換される (C11 から条件付き定義マクロに分類しなされた) |
|
(C23)__STDC_EMBED_NOT_FOUND__ | 0 に置換される(#embed で使用する) |
|
(C23)__STDC_EMBED_FOUND__ | 1 に置換される(#embed で使用する) |
|
(C23)__STDC_EMBED_EMPTY__ | 2 に置換される(#embed で使用する) |
ここに掲載する事前定義マクロは、条件を満たす処理系でのみ定義されます。
名前 | 概要 | 解説章 |
---|---|---|
__STDC_IEC_559__ | IEC 60559
浮動小数点演算の仕様に準拠している処理系で定義され、1
に置換される (C23 で古い機能とされた[2]) |
|
__STDC_IEC_559_COMPLEX__ | IEC 60559
互換複素数演算の仕様に準拠している処理系で定義され、1
に置換される (C23 で仕様から消えており、__STDC_IEC_60559_COMPLEX__ に置き換わっている) |
|
__STDC_ISO_10646__ | wchar_t型が Unicode を使用する場合に、Unicode のリビジョンを表す日付の整数定数に置換される | |
(C11)__STDC_UTF_16__ | char16_t型が UTF-16
でエンコーディングされた文字を扱う場合に定義され、1
に置換される (C23 から必須の事前定義マクロになった[3]) |
第47章 |
(C11)__STDC_UTF_32__ | char32_t型が UTF-32
でエンコーディングされた文字を扱う場合に定義され、1
に置換される (C23 から必須の事前定義マクロになった[3]) |
第47章 |
(C11)__STDC_ANALYZABLE__ | 規格書の annex L で定義される分析可能性 (Analyzability)
の仕様に準拠している処理系で定義され、1 に置換される |
|
(C11)__STDC_LIB_EXT1__ | 規格書の annex K で定義される境界チェックインタフェース
(Bounds-checking interfaces)
の仕様に準拠している処理系で定義され、201ymmL
に置換される(y は西暦の下位、m は月) (C23 では 202ymmL に置換される) |
|
(C11)__STDC_NO_ATOMICS__ | アトミック型と <stdatomic.h>
をサポートしていない場合に定義され、1 に置換される |
|
(C11)__STDC_NO_COMPLEX__ | 複素数型と <complex.h>
をサポートしていない場合に定義され、1 に置換される |
|
(C11)__STDC_NO_THREADS__ | <threads.h> をサポートしていない場合に定義され、1
に置換される |
|
(C11)__STDC_NO_VLA__ | 可変長配列や可変修飾型をサポートしていない場合に定義され、1
に置換される (C23 からは、自動記憶域期間を持つ可変長配列をサポートしていない場合に定義される。可変修飾型のサポートは必須となった[4]) |
|
(C23)__STDC_IEC_60559_BFP__ | 規格書の annex F で定義される ISO/IEC 60559 floating-point
arithmetic の
2進浮動小数点演算に準拠している処理系で定義され、202ymmL
に置換される(y は西暦の下位、m は月) |
|
(C23)__STDC_IEC_60559_DFP__ | 10進浮動小数点型と、規格書の annex F で定義される ISO/IEC 60559
floating-point arithmetic の
10進浮動小数点演算に準拠している処理系で定義され、202ymmL
に置換される(y は西暦の下位、m は月) |
|
(C23)__STDC_IEC_60559_COMPLEX__ | 規格書の annex G で定義される ISO/IEC 60559 compatible complex
arithmetic の仕様に準拠している処理系で定義され、202ymmL
に置換される(y は西暦の下位、m は月) |
|
(C23)__STDC_IEC_60559_TYPES__ | 規格書の annex H で定義される ISO/IEC 60559 interchange and extended
types の仕様に準拠している処理系で定義され、202ymmL
に置換される(y は西暦の下位、m は月) |
ここに掲載するマクロは、事前定義 “されてはならない” マクロです。
名前 | 概要 | 解説章 |
---|---|---|
__cplusplus | C++ の処理系で C++ のバージョンを表すために使われる。そのためC言語の処理系では定義してはならない[5] |
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |