выход препроцессора cpp не в состоянии понять? - PullRequest
0 голосов
/ 02 марта 2012

Извините, если мой вопрос очень простой. Я хотел бы понять вывод, производимый препроцессором CPP. Допустим, у меня есть очень простая следующая программа.

#include <stdio.h>
#include <stdlib.h>

int x=100;
int main ()
{
    printf ("\n Welcome..\n");
}

Я выполняю следующую команду.

cpp main.c  main.i

в main.i

# 1 "/usr/include/stdio.h" 1 3 4

Что означает вышеприведенная строка? ..

1 Ответ

5 голосов
/ 02 марта 2012

Документация gcc точно объясняет вывод препроцессора C.

Вот соответствующие разделы:

Выходные данные препроцессора C очень похожи на входные, за исключением того, что все строки директив предварительной обработки были заменены пустыми строками, а все комментарии - пробелами. Длинные серии пустых строк отбрасываются.

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

# linenum filename flags

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

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

1 Это указывает на начало нового файла.
2 Это указывает на возврат к файлу (после включения другого файла).
3 Это указывает на то, что следующий текст взят из системного заголовочного файла, поэтому некоторые предупреждения следует подавлять.
4 Это указывает на то, что следующий текст должен рассматриваться как заключенный в неявный внешний блок «C».

...