识别确切的头文件

Vij*_*jay 0 c c++ unix ksh

我在源文件(*.c)中使用了一些宏.

在编译期间或从库中是否有任何方法可以确定从中解析此特定宏的确切头文件?

问题是我们在某些头文件中使用宏#defined为10,但代码中接收的值为4.因此,我们不想去检查所有dep文件,而是想知道有一些直接的方法来识别宏从中解析出来的源.

小智 7

如果您只是在文件上运行cpp(C预处理器),则输出将包含表单的#line指令

#line 45 "silly-file-with-macros.h"
Run Code Online (Sandbox Code Playgroud)

为编译器说明一切都来自哪里.所以一种方法是使用

 cpp my-file.c | more
Run Code Online (Sandbox Code Playgroud)

并寻找#line指令.

根据您的编译器,您可以使用的另一个技巧是将宏重新定义为其他内容,编译器将发出类似的警告

test-eof.c:5:1: warning: "FRED" redefined
test-eof.c:3:1: warning: this is the location of the previous definition
Run Code Online (Sandbox Code Playgroud)

(这是来自gcc),它应该告诉你之前定义宏的位置.但是想一想,你怎么没有得到那个警告呢?

另一个想法是使用makedepend获取所有包含文件的列表,然后grep它们中的#define行.