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つは取り上げないことにします。詳細はリファレンスサイトなどで確認してください。以下にリンク(外部サイト)をまとめておきます。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |