Я недавно обнаружил, что gcc пропускает предварительную обработку, если окончание файла равно .i или .ii, и решил попробовать. Компиляция программы hello world без включения stdio.h:
gcc -Wall file.c; # compiles with preprocessor, implicit declaration of puts
gcc -Wall file.i; # compiles without preprocessor, implicit declaration of puts
Я не могу включить stdio.h без директивы препроцессора, но я помню, что флаг -include для gcc можно использовать для «принудительного включения» заголовков. Это привело к следующему тесту:
gcc -Wall -include stdio.h file.c; # no warnings, "hello world". hooray
gcc -Wall -include stdio.h file.i; # implicit declaration of puts WAIT WHAT?!
Мне странно, что gcc не включает stdio.h при компиляции файла без предварительной обработки. Еще более странно, как не выдается предупреждение; -include stdio.h
не имеет видимого эффекта, что в лучшем случае является ошибочным использованием gcc.
Почему это не работает?
GCC версия 6.3.0.