__cplusplus
読み:アンダースコア-アンダースコア-スィープラスプラス
外語:__cplusplus
CとC++を区別する際によく用いられるプリプロセッサーマクロ。
概要
多くのC++処理系は、C++翻訳単位(translation unit)の翻訳中に__cplusplusを定義する。CとC++の両方でコンパイルできるソースを書く場合、このマクロの有無を見ることで、CとC++で仕様の違う部分を切り分けることができる。
古いC++の実装ではc_plusplusを使うものもあったが、現在ではc_plusplusは使われていない。
特徴
ISO/IEC 14882(ISO C++)では、その値は199711Lとされている。
但し、Visual C++やGCC、clang/LLVMはじめ、多くの実装では1で定義されている。
用例
NULLの定義で、Cなら(void *)0、C++なら0で定義する例。
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
C++の場合、型チェックが厳しくなったためにこのような事をせざるを得なくなり、実質的に型チェックは劣化した。
再検索