将处理过的预处理器指令包含到“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
不包含预定义的宏。
我在使用 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
不包含预定义的宏。