我正在深入研究glibc源代码,发现了很多预处理器的用法,比如
#ifdef XXX
和
#if YYY
为了知道将在我的机器上编译和运行的glibc的确切行为,我必须知道这些标志是否确实已定义。我目前正在做的是将以下代码插入到某处,编译和运行,这既不优雅也不高效。
#ifdef XXX
printf("XXX defined");
#endif
另一种方式可能是grep
整个源代码树中的标志,但我发现这种方式不太可靠。因为有时候我找不到任何#define XXX
,但我仍然打印出XXX defined
。 (任何人都可以让我知道为什么吗?)
因此,我想知道这样做的最佳做法是什么。
答案 0 :(得分:2)
我发现gcc
与-g3
和gdb
的组合对于检查宏,甚至宏函数宏扩展非常有用。有关详细信息,请参阅GDB手册中的man gcc
和12 C Preprocessor Macros。
随着更多"侵入性"您可以在编译期间使用#pragma message
(或类似的)指令来检查单个宏:
在编译时将字符串打印为编译器消息。信息是 仅供参考,既不是编译警告也不是错误。
还有-E
开关,可以简单地查看预处理的翻译单元。