Шестнадцатеричная константа в C беззнаковая, хотя суффикс L

Я знаю, что это простой вопрос, но я сбит с толку. У меня есть довольно типичное предупреждение gcc, которое обычно легко исправить:
предупреждение: сравнение знаковых и беззнаковых целочисленных выражений

Всякий раз, когда у меня есть шестнадцатеричная константа со старшим битом, например 0x80000000L, компилятор интерпретирует ее как беззнаковую. Например, компиляция этого кода с -Wextra вызовет предупреждение (gcc 4.4x, 4.5x):

int main()
{
long test = 1;
long *p = &test;
if(*p != 0x80000000L) printf("test");
}

Я специально присвоил константе такой же суффикс, так почему это происходит?

8
задан jww 2 April 2018 в 05:19
поделиться