Следующая программа имеет неопределенное поведение:
#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"
и т. д., чтобы убедиться, что предоставленные аргументы имеют типы, соответствующие указанной строке формата, и что преобразования, указанные в строке формата, имеют смысл