找到打破编译的#define

2 c c++ gcc

我遇到一种情况,其中一个头文件中的#define在另一个头文件中打破了枚举声明.

使用-E开关gcc我已经确定我有

#define OFF 0
Run Code Online (Sandbox Code Playgroud)

某处.

问题是,我怎么找出哪里?该项目规模庞大,包括几十个目录,数百个包含文件.我最终会做一个全局grep,但问题是,有没有办法让gcc编译器在哪里发生#define?它显然有这些信息!

更新:感谢不是一个而是两个解决方案 - SO来了.仅仅是为了记录,罪魁祸首是Sybase客户端库的包含之一(ctlib,甚至不是dblib).哎哟.

lit*_*adv 15

您可以重新定义它(到不同的值).然后gcc将告诉你它已经定义的位置.

在我的系统上它看起来像这样:

在<some file>中包含的文件中:27,

             from < another file >:13: 
Run Code Online (Sandbox Code Playgroud)

<带有重新定义值的头文件>:30:1:>警告:"<define>"已重新定义

<command-line>:警告:这是前一个定义的位置


flo*_*olo 5

将选项-dD与-E一起使用.启用这两个后,您将看到包含定义的预处理结果.只需找你宏(如#define OFF 1)并向上滚动# number filename,然后找到最后一个包含文件,因此它是定义宏的那个.