在使用g++
编译第三方库时,我遇到了一些预处理事故。
我可以在-E
输出中看到正在绕过包含#ifndef SYMBOL
的某个标头。显然,该符号已在其他地方定义。
但我看不到哪里因为-E
输出中没有处理指令。
有没有办法包含它们(可能是评论)?
答案 0 :(得分:1)
不,没有标准方法可以将预处理指令作为注释。
但是,您可以使用g++ -C -E
和行号(以#
开头的行输出)和注释(然后将其复制到预处理表单中)。
您也可以使用-H
选项(以获取包含的文件)
答案 1 :(得分:1)
我发现最接近的是-d<chars>
系列选项:
-dM
转储所有已定义的宏-dD
显示了它们的定义位置(转储#define
指令) -dU
显示了它们的使用位置(代替#if(n)def
,根据宏是否已定义输出#define
或#undef
)
将I
添加到其中任何一个也会转储#include
指令。
缺点是三个中只有一个可以一次使用,它们会抑制正常输出。
另一个不太容易理解的缺点是-dD
和-dU
不包含预定义的宏。