将处理过的预处理器指令包含到“g++ -E”输出中

include processed prepocessor directives into `g++ -E' output

我在使用 g++ 编译第 3 方库时遇到一些预处理错误。

我可以在 -E 输出中看到用 #ifndef SYMBOL 包裹的某个 header 被绕过了。显然,该符号已在其他地方定义。 但是我看不到在哪里,因为 -E 输出中不存在已处理的指令。

有没有办法将它们包括在内(可能作为评论)?

不,没有将预处理指令作为注释获取的标准方法。

但是,您可以使用 g++ -C -E 和行号(在以 # 开头的行中输出)和注释(然后将其复制到预处理表单)。

您还可以使用 -H 选项(获取包含的文件)

我找到的最接近的是 -d<chars> 系列选项:

  • -dM 转储定义的所有宏
  • -dD 显示它们的定义位置(转储 #define 指令)
  • -dU 显示它们的使用位置(代替 #if(n)def,它根据宏是否定义输出 #define#undef )

    向其中任何一个添加 I 也会转储 #include 指令。

缺点是一次只能使用三个中的一个,它们会抑制正常输出。

另一个不太容易理解的缺点是 -dD-dU 不包含预定义的宏。