打印所有已定义的宏

Ant*_*ile 5 c macros

我正在尝试重构一段遗留代码,并且我想要在源中的某个点定义的所有宏的快照.代码导入了一些荒谬的标题等,手动跟踪它们有点乏味.

就像是

#define FOO 1


int myFunc(...) {
    PRINT_ALL_DEFINED_THINGS(stderr)

    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

预计输出中的某个地方

MACRO: "FOO" value 1
Run Code Online (Sandbox Code Playgroud)

我正在使用gcc,但如果它们更容易完成此任务,则可以访问其他编译器.

编辑:

链接的问题没有给我正确的输出:

#include <stdio.h>

#define FOO 1

int main(void) {
    printf("%d\n", FOO);
}

#define FOO 0
Run Code Online (Sandbox Code Playgroud)

1运行时打印非常清晰,但gcc test.c -E -dM | grep FOO给出0

den*_*svm 5

要转储所有定义,您可以运行:

gcc -dM -E file.c
Run Code Online (Sandbox Code Playgroud)

检查GCC 转储预处理器定义

所有将转储的定义将是定义(或最后重新定义)的值,您将无法转储代码的所有这些部分中的定义值。

您还可以附加选项“-Wunused-macro”以在重新定义宏时发出警告。