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