将处理过的预处理指令包含在`g ++ -E'输出

时间:2016-02-15 12:14:34

标签: g++ c-preprocessor

在使用g++编译第三方库时,我遇到了一些预处理事故。

我可以在-E输出中看到正在绕过包含#ifndef SYMBOL的某个标头。显然,该符号已在其他地方定义。 但我看不到哪里因为-E输出中没有处理指令。

有没有办法包含它们(可能是评论)?

2 个答案:

答案 0 :(得分:1)

不,没有标准方法可以将预处理指令作为注释。

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

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

答案 1 :(得分:1)

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

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

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

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

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