我正在尝试重构一段遗留代码,我想要在源代码的某个点定义的所有宏的快照。代码导入了大量的标题等,手动跟踪它们有点乏味。
像
这样的东西#define FOO 1
int myFunc(...) {
PRINT_ALL_DEFINED_THINGS(stderr)
/* ... */
}
预计输出中的某个地方
MACRO: "FOO" value 1
我正在使用gcc,但如果它们更容易完成此任务,则可以访问其他编译器。
编辑:
链接的问题没有为我提供正确的输出:
#include <stdio.h>
#define FOO 1
int main(void) {
printf("%d\n", FOO);
}
#define FOO 0
运行时非常清楚地打印1
,但gcc test.c -E -dM | grep FOO
给我0
答案 0 :(得分:1)
要转储所有可以运行的定义:
gcc -dM -E file.c
检查GCC dump preprocessor defines
所有定义它将转储将是定义的值(或最后重新定义的),您将无法在所有这些代码部分中转储定义值。
您还可以附加选项“-Wunused-macro”,以便在重新定义宏时发出警告。