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)的预处理输出中的包含路径/数字是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

gcc常用的参数说明

gcc常用的参数说明

什么是 GCC 默认包含目录?

GCC 编译详解

GCC内置宏

使用变量包含参数在生成文件中添加 Windows 包含路径