Что означают числа в препроцессированных файлах .i при компиляции C с gcc?

Я пытаюсь понять процесс компиляции. Мы можем просмотреть промежуточный файл препроцессора, используя:

gcc -E hello.c -o hello.i

или

cpp hello.c > hello.i

Я точно знаю, что делает препроцессор, но мне трудно понять числа в некоторых строках. Например:

 # 1 "/usr/include/stdc-predef.h" 1 3 4
 # 1 "<command-line>" 2
 # 1 "hello.c"
 # 1 "/usr/include/stdio.h" 1 3 4
 # 27 "/usr/include/stdio.h" 3 4
 # 1 "/usr/include/features.h" 1 3 4
 # 374 "/usr/include/features.h" 3 4

Цифры могут помочь отладчику отображать номера строк. Таким образом, моя догадка для первого столбца - это номер строки для файла столбца # 2. Но что делают следующие цифры?

Ответы

Ответ 1

Цифры, следующие за именем файла, являются флагами:

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

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

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

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

Источник: https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html