【发布时间】:2019-05-28 16:43:01
【问题描述】:
编译器是否使用 C 预处理器输出中的 linemarkers(# 1 "donothing.cpp" 2) 来生成汇编程序 (.s) 文件?
我希望它们用于产生编译器错误和调试信息。所以我可以在尝试跟随宏流程的同时安全地关闭这些(使用-P)?
我正在学习 C++ 和 C 预处理器。我在许多 C++ 教程中读到,宏通常很难正确编写并且可能会产生意想不到的结果。这是一个示例预处理器输出。 The C Preprocessor: Preprocessor Output
$ 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 文件并且总是存在编译器错误)?
【问题讨论】:
-
我已经用 C 和 C++ 编程超过 35 年了,我从来不需要查看预处理器的输出。
-
@NeilButterworth 调试信息一般够用吗?如果没有,我可以询问调试编译器错误的一般方法/建议吗?
标签: c++ compilation c-preprocessor clang++