これは簡単な質問ですが、混乱しています。私はかなり典型的なgcc警告を持っていますが、これは通常簡単に修正できます。
warning: comparison between signed and unsigned integer expressions
0x80000000Lのように、最上位ビットの16進定数がある場合は常に、コンパイラーはそれを符号なしとして解釈します。たとえば、このコードを-Wextraでコンパイルすると、警告(gcc 4.4x、4.5x)が発生します。
int main()
{
long test = 1;
long *p = &test;
if(*p != 0x80000000L) printf("test");
}
私は特に定数に接尾辞を付けているのに、なぜこれが起こっているのですか?