我正在使用源文件中的某个宏(.c)。
在编译过程中或从库中,是否有任何方法可以确定解析此特定宏的确切头文件?
问题是我们在一些头文件中使用了定义为10的宏,但是代码中接收到的值是4。因此,我们不想去检查所有的dep文件,而是想知道是否有一些直接的方法来识别宏的解析源。
最佳答案
如果只对文件运行cpp(C预处理器),则输出将包含窗体的#line指令
#line 45 "silly-file-with-macros.h"
因为编译器说一切都是从哪里来的。所以一种方法是
cpp my-file.c | more
并查找
#line
指令。根据编译器的不同,您可以使用的另一个技巧是将宏重新定义为其他内容,并且编译器将弹出如下警告
test-eof.c:5:1: warning: "FRED" redefined
test-eof.c:3:1: warning: this is the location of the previous definition
(这是来自gcc)它应该会告诉您宏以前是在哪里定义的。但想想看,你怎么还没有收到警告呢?
另一种方法是使用
makedepend
获取包含的所有文件的列表,然后将其grep为#define
行。关于c++ - 识别确切的头文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1601008/