Страницы

Поиск по вопросам

среда, 4 декабря 2019 г.

Комментарии, оставляемые препроцессором

#cpp #gcc


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

int main()
{
    return 0;
}


получается 

# 1 "main.cpp"
# 1 ""
# 1 ""
# 1 "main.cpp"

int main()
{
    return 0;
}


Так вот, что значит # 1 "main.cpp", # 1 "", # 1 "",# 1 "main.cpp"?
Читал про препроцессор, ничего не нашел по этому поводу. 

PS: Суть в том, что я хочу написать свой компилятор С++, а начать естественно с препроцессора
так как это сама простая часть. Какой то сверх задачи не стоит, просто ради развлечения.
И естественно, проверять препроцессор хотелось бы сразу. До того как я напишу всё.
Отсюда и такой странный вопрос о препроцессоре.
Ну и конечно я не планирую реализовывать все что есть в компиляторе. Только минимум.
    


Ответы

Ответ 1



В стандарте С++ этого нет. Насколько я знаю, GCC использует эти отметки только для того, чтобы в сообщениях об ошибках (и предупреждениях) номера строк и названия файлов были правильные. То есть чтобы номера строк соответствовали коду до препроцессирования, а не после. И если ошибка случилась в заинклуженом файле, чтобы это было указано в сообщении об ошибке. Пример: # 100 "foo.cpp" int main() { f } На этот код GCC выдает: foo.cpp:103:5: error: 'f' was not declared in this scope Смотрите, название файла и номер строки он взял не настоящие, а такие, как было указано после #.

Комментариев нет:

Отправить комментарий