列出C程序中的所有#defines

时间:2010-10-14 10:40:00

标签: c

是否可以在执行时获取C程序中使用的#defines列表(编译时间和源代码中定义的)。 因为我的项目有很多C源文件。

是否有任何编译时选项可以获得它?

3 个答案:

答案 0 :(得分:5)

GNU cpp使用各种-d选项输出宏并定义数据。有关详细信息,请参阅其手册页。

答案 1 :(得分:3)

对于gcc,您可以使用以下方法之一:

-dCHARS CHARS是一个或多个以下字符的序列,不得以空格开头。其他字符由编译器正确解释,或保留用于GCC的未来版本,因此会被忽略。如果指定行为冲突的字符,则结果未定义。

M' Instead of the normal output, generate a list of #define'指令用于执行预处理程序期间定义的所有宏,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有文件foo.h,那么命令                触摸foo.h; cpp -dM foo.h

将显示所有预定义的宏。

如果在没有-E选项的情况下使用-dM,则-dM将被解释为-fdump-rtl-mach的同义词。请参阅调试选项。

D' Like M'除了两个方面:它不包含预定义的宏,它输出#define' directives and the result of preprocessing. Both kinds of output go to the standard output file. N' 像“D”一样,但只发出宏名称,而不是它们的扩展。

I' Output #include'指令以及预处理的结果。

U' Like D'除了仅输出扩展的宏或在预处理器指令中测试其定义的宏之外;输出被延迟,直到使用或测试宏;并且`#undef'指令也输出用于测试的宏,但当时未定义。

答案 2 :(得分:2)

在gcc中你可能想要的命令是

gcc -dM -E [your_source_files]

我知道这是在上面的答案中隐含的,但也许有人需要(像我一样)快速食谱。