[英]Are line-markers in C preprocessor output used by compiler?
编译器使用的C预处理器输出中的线性标记( # 1 "donothing.cpp" 2
)是否生成汇编程序(.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文件并且总是存在编译器错误)?
行号指令有两个主要目的:
如果编译器遇到错误,它将使用最新的行号指令来确定错误消息中要引用的文件和行。
( #line
指令甚至可以在生成的代码中使用,以允许错误消息直接指向原始源文件,而不是指向中间C源文件。)
如果打开调试信息( -g
),则行号数据将包含在生成的目标文件的调试部分中。
这些目的都不重要。 如果您正在查看汇编程序输出并且行号指令正在妨碍您,请随时关闭它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.