事前定義マクロの一覧 | Programming Place Plus C言語編

トップページC言語編

事前定義マクロ 🔗

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]

参考リンク 🔗


更新履歴 🔗



C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る