c ++ "#include" выходное объяснение - PullRequest
10 голосов
/ 12 марта 2019

Пытается понять, как работает #include. Я читаю, что во время предварительной обработки он просто заменяет собой содержимое указанного файла.

Для проверки я создаю два файла. Файл с именем otherfile содержит только строку 1234, а файл test.cpp содержит

#include otherfile
abcd

Я запускаю g++ -E test.cpp, и получаю вывод

# 1 "test.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 373 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test.cpp" 2
# 1 "./wtf" 1
1234
# 2 "test.cpp" 2
abcd

Откуда берутся остальные строки и что они значат?

1 Ответ

9 голосов
/ 12 марта 2019

Откуда берутся остальные строки

Они добавляются препроцессором.

а что они значат?

Согласно документации

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

# linenum filename flags

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

...