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