Я знаю, что это простой вопрос, но я в замешательстве. У меня довольно типичное предупреждение 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");
}
Я специально указывал суффикс константы так долго, так почему это происходит?