2010-10-14 37 views
2

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

是否有任何编译时间选项来获取?

+1

你能说你正在使用哪种编译器吗? – Doug 2010-10-14 10:42:14

+0

飞思卡尔Starcore编译器 – 2010-10-14 10:46:00

回答

2

在GCC,你可能要执行的命令是

gcc -dM -E [your_source_files] 

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

+0

非常感谢你 – 2011-02-04 04:45:17

5

GNU cpp需要各种-d选项来输出宏和定义数据。查看他们的手册页获取更多详细信息

+0

非常感谢你 – 2010-10-14 11:20:17

3

为GCC,您可以使用下列之一:

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

M' Instead of the normal output, generate a list of #define'指令,用于执行预处理器期间定义的所有宏,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有文件foo.h,命令 touch 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'指令也会被输出到被测试的宏,但是当时没有定义。

相关问题