Почему gcc -Wformat не предупреждает о printf %d для беззнакового целого числа?

Следующая программа имеет неопределенное поведение:

#include <stdio.h>

int main(void)
{
    unsigned int x = -100; // This is fine, becomes UINT_MAX - 100
    printf("%d\n", x); // This is undefined behavior.
    return 0;
}

C99 7.19.6.1p8 states %d expects an int argument.

C99 7.19.6.1p9 states "If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined."

Однако gcc-Wformat(который включен в-Wall)не будет жаловаться на вышеуказанную программу, почему? Это ошибка или преднамеренное упущение?

Из справочной страницы gcc:

-Wformat

Проверьте вызовы "printf"и "scanf"и т. д., чтобы убедиться, что предоставленные аргументы имеют типы, соответствующие указанной строке формата, и что преобразования, указанные в строке формата, имеют смысл

9
задан Destructor 14 June 2016 в 13:06
поделиться