繁体   English   中英

编译器是否使用C预处理器输出中的行标记?

[英]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文件并且总是存在编译器错误)?

行号指令有两个主要目的:

  1. 如果编译器遇到错误,它将使用最新的行号指令来确定错误消息中要引用的文件和行。

    #line指令甚至可以在生成的代码中使用,以允许错误消息直接指向原始源文件,而不是指向中间C源文件。)

  2. 如果打开调试信息( -g ),则行号数据将包含在生成的目标文件的调试部分中。

这些目的都不重要。 如果您正在查看汇编程序输出并且行号指令正在妨碍您,请随时关闭它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM