icpc(或我猜是gcc)的预处理输出中的包含路径/数字是啥意思?
Posted
技术标签:
【中文标题】icpc(或我猜是gcc)的预处理输出中的包含路径/数字是啥意思?【英文标题】:What do the include paths/numbers in preprocessed output of icpc (or gcc I guess) mean?icpc(或我猜是gcc)的预处理输出中的包含路径/数字是什么意思? 【发布时间】:2012-06-22 19:38:49 【问题描述】:如果我在编译时使用 -E 标志,我会得到预处理输出。
此输出中的某些行是:-
# 4 "../Framework.h" 2
# 1 "../Basic.h" 1
# 1 "/usr/include/c++/4.1.2/queue" 1 3
这是什么意思?您是否可以向我指出更多信息的来源?
【问题讨论】:
What is the meaning of lines starting with a hash sign and number like '# 1 "a.c"' in the gcc preprocessor output?的可能重复 【参考方案1】:它们是关于已处理代码的编译器信息(如果编译器生成调试信息,则随后是调试器)。我不知道确切的语法,但它们会告知包含路径、包含文件中“#include”指令的位置以及包含文件中预处理器未删除的下一行的位置。有了这些信息(并计算未注释的行),编译器可以为您提供诊断信息,将您指向正确的行以及它是如何被包含在内的。
【讨论】:
好吧,我自己也隐约明白了这一点。不幸的是,我的编译器似乎包含一些乱序的标头,我想弄清楚原因(这显然是我的代码中的一个错误)。一个更精确的答案和精确的语法(如果没有通用答案,则为 icpc12)将不胜感激。 @owagh:所有标题都应该包含它们各自的依赖项,这反过来意味着包含的顺序无关紧要。是的,这是您的代码中的一个问题,您应该通过查看编译器错误来解决它:每当它告诉您依赖项(无法识别标识符)时,将 include 指令添加到该文件,重新编译,查看错误... @owagh:答案还是一样的:让你的标题独立于包含顺序,通过向前声明类型或包含定义/声明它们的标题来命名所有依赖项。跨度>以上是关于icpc(或我猜是gcc)的预处理输出中的包含路径/数字是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章