我正在使用源文件中的某个宏(.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/

10-13 06:40