次のごく単純なC++コードは、VC++ではコンパイルできますが、gccではコンパイルできません。
1
2
3
4
5
6
7
8
| - | | | ! |
|
実はC++規格では、一部演算子の代替表現が予約語*1になっています。
上述のコードをgccでコンパイルすると、 not
が演算子として扱われるために正しくないコードになってしまうというわけです。
VC++やC言語ではこれらの代替表現を予約語として扱いません。
VC++でのコーディング中にこれらの予約語を変数名などに利用すると、C++規格に準拠したコンパイラではコンパイルできないコードになってしまいます。
なお、VC++やC言語でも同等の代替表現を利用したい場合、 <ciso646> ヘッダ(C言語では <iso646.h> ヘッダ)をインクルードすることでマクロとして定義されます。
gcc等、既に予約語としてサポートしている処理系では、これらのヘッダファイルをインクルードしても何も定義されません。
基本的にはわざわざこれらの代替表現を使う必要はないですが、 not
演算子などは案外 !
演算子よりも見やすいかもしれませんね。