我在我的源文件 (*.c) 中使用了一些宏。
在编译期间或从库中是否有任何方法可以识别从中解析此特定宏的确切头文件?
问题是我们在某个头文件中使用宏#defined to 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/