G++ 将已处理的前置处理器指令包括到'g++-E';输出

G++ 将已处理的前置处理器指令包括到'g++-E';输出,g++,c-preprocessor,G++,C Preprocessor,在使用g++编译第三方库时,我遇到了一些预处理问题 我可以在-E输出中看到,用#ifndef符号包装的某个标题被绕过。显然,这个符号是在别的地方定义的。 但是我看不到哪里,因为-E输出中不存在经过处理的指令 是否有方法将它们(可能作为注释)包括在内?不,没有标准方法将预处理的指令作为注释 但是,您可以使用g++-C-E和行号(以#开头的行输出)以及注释(然后将其复制到预处理表单) 您还可以使用-H选项(获取包含的文件)我找到的最接近的选项是一系列选项: -dM转储定义的所有宏 -dD显示它们的

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

我可以在
-E
输出中看到,用
#ifndef符号包装的某个标题被绕过。显然,这个符号是在别的地方定义的。
但是我看不到哪里,因为
-E
输出中不存在经过处理的指令


是否有方法将它们(可能作为注释)包括在内?

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

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


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

我找到的最接近的选项是一系列选项:

  • -dM
    转储定义的所有宏
  • -dD
    显示它们的定义位置(转储
    #define
    指令)
  • -dU
    显示它们的使用位置(代替
    #if(n)def
    ,它输出
    #define
    #unde
    ,具体取决于宏是否已定义)

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

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

另一个不易理解的缺点是
-dD
-dU
不包括预定义的宏