- 追加された行はこの色です。
- 削除された行はこの色です。
#blog2navi()
*C++演算子の代替表現 [#q55e4301]
次のごく単純なC++コードは、VC++ではコンパイルできますが、gccではコンパイルできません。
#code(c){{
#include <iostream>
int main()
{
int not = 0;
std::cout << not << std::endl;
return 0;
}
}}
実はC++言語規格では、一部演算子の代替表現がキーワードとして予約されています。
-[[CとC++の演算子:C++の演算子の代替表現 - Wikipedia>Wikipedia:CとC++の演算子#C++の演算子の代替表現]]
上述のコードをgccでコンパイルすると、 @code{not}; が演算子として扱われるために正しくないコードになってしまうというわけです。
VC++やC言語ではこれらの代替表現をキーワードとして扱いません。~
VC++でのコーディング中にこれらのキーワードを変数名などに利用すると、C++規格に準拠したコンパイラではコンパイルできないコードになってしまいます。
なお、VC++やC言語でも同等の代替表現を利用したい場合、 <ciso646> ヘッダ(C言語では <iso646.h> ヘッダ)をインクルードすることでマクロとして定義されます。~
gcc等、既にキーワードとしてサポートしている処理系では、これらのヘッダファイルをインクルードしても何も定義されません。
基本的にはわざわざこれらの代替表現を使う必要はないですが、 @code{not}; 演算子などは案外 @code{!}; 演算子よりも見やすいかもしれませんね。
RIGHT:Category: [[[C++>ぼやきごと/カテゴリ/C++]]][[[プログラミング>ぼやきごと/カテゴリ/プログラミング]]] - 2014-01-19 05:28:14
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()