Опция GCC -save-temps numbers после заголовочных файлов - PullRequest
0 голосов
/ 02 сентября 2018

Когда я компилирую код в gcc с параметром -save-temps, результирующий filename.i, в котором хранится предварительно обработанный вывод, имеет такие строки, как:

#44 "/usr/include/stdio.h" 3 4
struct _IO_FILE;

, где 44 - номер строки в /usr/include/stdio.h, который включает код struct _IO_FILE;. Я хотел бы знать, что такое 3 4 после названия заголовка. Я искал в man gcc, но не нашел объяснения.

1 Ответ

0 голосов
/ 02 сентября 2018

https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html#Preprocessor-Output:

Имя исходного файла и информация о номере строки передаются по строкам вида

# linenum filename flags

Они называются linemarkers . Они вставляются по мере необходимости в вывод (но никогда внутри строки или символьной константы). Они означают, что следующая строка возникла в файле filename в строке linenum . имя файла никогда не будет содержать непечатаемых символов; они заменяются восьмеричными escape-последовательностями.

После имени файла указывается ноль или более флагов, которые 1, 2, 3 или 4. Если есть несколько флагов, пробелы разделяют их. Вот что означают флаги:

  • 1 - указывает на начало нового файла.

  • 2 - указывает на возврат к файлу (после включения другого файла).

  • 3 - Это указывает на то, что следующий текст взят из системного заголовочного файла, поэтому некоторые предупреждения следует подавлять.

  • 4 - Это указывает на то, что следующий текст должен рассматриваться как заключенный в неявный блок extern "C".

...