私は、次のコードを持っている:GCCとの奇妙な警告動作および署名/符号なしの比較
unsigned int a;
if (a > numeric_limits<int>::max())
do_stuff();
コンパイル、gccはおよそ
"との比較を符号付きと符号なし"警告が文句:
OK、分かりました
ただし、次のコードを使用してください:
unsigned int a;
if (a > (numeric_limits<int>::max()))
do_stuff();
は、そのような行動のための論理的な理由があるのか、私が何か間違ったことをやっている...警告は表示されなくなり、私は本当に理由を知りません!
[この動作をシミュレート](のhttp:// WWWを。 ideone.com/5NZL9)。しかし、警告が表示されます。 – iammilind
周辺のコードは何ですか? – quasiverse
do_stuff()部分は、例外をスローするだけです。これは関数内の唯一の行であるため、周囲のコードはありません。ただし、この関数は大きなプロジェクトで使用されます。 iammilindが提供するコードを試しましたが、警告は表示されません。ここに私がプログラム '-Wall -ansi -pedantic -Wno-long-long'をコンパイルするために使用するgccオプションがあります。 – malamioute