我知道这是一个简单的问题,但我很困惑。我有一个相当典型的 gcc 警告,通常很容易修复:
warning: comparison between signed and unsigned integer expressions
每当我有一个具有最高有效位的十六进制常量时,例如 0x80000000L,编译器会将其解释为无符号。例如,使用 -Wextra 编译此代码将导致警告 (gcc 4.4x, 4.5x):
int main()
{
long test = 1;
long *p = &test;
if(*p != 0x80000000L) printf("test");
}
我已经专门为常量加上了后缀,那么为什么会发生这种情况呢?