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

トップページ新C++編

事前定義マクロ 🔗

C++ に存在する事前定義マクロの一覧です。本編の解説に合わせて、C++14 をベースにして作成しており、それより前のバージョンでの事情を無視しています

事前定義マクロは、処理系があらかじめ定義しているマクロです。何かしらのヘッダファイルをインクルードするといった準備が不要で、いつでも使用可能になっています。ただし、標準規格によって必ず定義しなければならないと定められているものと、条件付きで定義されるものとがあります。

#undef を使って無効化することは未定義動作です[1]

事前定義マクロについては「プリプロセス」のページで取り上げています。

必須の事前定義マクロ 🔗

ここに掲載する事前定義マクロは、標準規格によって必ず定義するルールになっています。

名前 概要 解説章
__cplusplus C++ のバージョンを表す整数リテラルに置換される
__FILE__ ソースファイルの名前の文字列リテラルに置換される(#line の影響を受ける) プリプロセス
__LINE__ ソースファイルの行数の整数定数に置換される(#line の影響を受ける) プリプロセス
__DATE__ コンパイル時の日付に置換される プリプロセス
__TIME__ コンパイル時の日時に置換される プリプロセス
__STDC_HOSTED__ ホスト処理系では 1、それ以外では 0 に置換される
(C++17)__STDCPP_­DEFAULT_­NEW_­ALIGNMENT__ operator new(std::size_t) や operator new が保証するアラインメントを表す std::size_t型のリテラルに置換される
(C++23)__STDCPP_FLOAT16_T__ 拡張浮動小数点型として、ISO/IEC/IEEE 60559 floating-point interchange format binary16 をサポートする場合に定義され、1 に置換される
(C++23)__STDCPP_FLOAT32_T__ 拡張浮動小数点型として、ISO/IEC/IEEE 60559 floating-point interchange format binary32 をサポートする場合に定義され、1 に置換される
(C++23)__STDCPP_FLOAT64_T__ 拡張浮動小数点型として、ISO/IEC/IEEE 60559 floating-point interchange format binary64 をサポートする場合に定義され、1 に置換される
(C++23)__STDCPP_FLOAT128_T__ 拡張浮動小数点型として、ISO/IEC/IEEE 60559 floating-point interchange format binary128 をサポートする場合に定義され、1 に置換される
(C++23)__STDCPP_BFLOAT16_T__ 拡張浮動小数点型として、typedef名std::bfloat16_t をサポートする場合に定義され、1 に置換される

条件付き定義マクロ

ここに掲載する事前定義マクロは、条件を満たす処理系でのみ定義されます。

名前 概要 解説章
__STDC__ C言語の標準規格への準拠を示すものであり、C++ としては定義の有無、置換結果ともに処理系定義
__STDC_VERSION__ C言語の標準規格バージョンを示すものであり、C++ としては定義の有無、置換結果ともに処理系定義
__STDC_ISO_10646__ wchar_t型が Unicode を使用する場合に、Unicode のリビジョンを表す日付の整数定数に置換される
(C++23 からは定義の有無、置換結果ともに処理系定義[2]
__STDC_MB_MIGHT_NEQ_WC__ 基本文字セットの文字x に対して、'x' == L'x' が false になる場合がある処理系で 1 に置換される
__STDCPP_STRICT_POINTER_SAFETY__ 厳密なポインタ安全性を持つ処理系で定義され、1 に置換される
(C++23 で削除されている)
__STDCPP_THREADS__ プログラムが複数の実行スレッドを持つことができる場合に定義され、1 に置換される

機能テストマクロ 🔗

機能テストマクロ (feature test macro) は、C++ の各種機能の実装状況を判定するために使用できるマクロで、対象の機能が実装されている場合に定義されます。機能テストマクロは、事前定義マクロになっているものと、標準ヘッダの中で定義されているものとがあります。

置換結果は仕様が採用された年月を意味する整数リテラルです(たとえば 201304 のような)。のちに仕様が更新されると、機能テストマクロの置換結果も新しい年月を意味するものに更新されることがあります。

種類が非常に多いので、当サイトでは1つ1つは取り上げないことにします。詳細はリファレンスサイトなどで確認してください。以下にリンク(外部サイト)をまとめておきます。

参考リンク 🔗


更新履歴 🔗



新C++編のトップページへ

Programming Place Plus のトップページへ



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