Являются ли линейные маркеры (# 1 "donothing.cpp" 2
) в выходных данных препроцессора C используемыми компилятором для генерации файла ассемблера (.s)?
Я ожидаю, что они используются для получения ошибок компилятора и отладочной информации.Так что я могу безопасно отключить их (с помощью -P
), пытаясь следить за потоком макросов?
Я изучаю C ++ и препроцессор C.Я читал во многих руководствах по C ++, что макросы, как правило, трудно написать правильно и могут привести к неожиданным результатам.Вот пример выходных данных препроцессора. Препроцессор C: Выход препроцессора
$ g++ -Wall -std=c++11 -E donothing.cpp
# 1 "donothing.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 391 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "donothing.cpp" 2
int main()
{
return 0;
}
$ g++ -Wall -std=c++11 -E donothing.cpp -P
int main()
{
return 0;
}
Считает ли вывод препроцессора способ отладки ошибок компилятора?Как еще разработчики c / c ++ отлаживают свои макросы (поскольку я ожидаю, что люди очень часто работают с несколькими файлами .cpp, и всегда возникают ошибки компилятора)?