如何找到具体实现的定义值?

时间:2011-12-09 21:39:50

标签: c c-preprocessor

我正在使用特定于ARM微处理器的GCC变体,我试图弄清楚这个宏在stdint.h中做了什么。

   #if defined(__GNUC__) && \
    ( (__GNUC__ >= 4) || \
    ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2) ) )
    /* gcc > 3.2 implicitly defines the values we are interested */ 
    #define __STDINT_EXP(x) __##x##__
    #else
    #define __STDINT_EXP(x) x
    #include <limits.h>
    #endif

__GNUC__是一个特定于实现的宏,但是你怎么知道编译器正在使用什么呢? Printf()不适用于此编译器,因为它的输出是针对嵌入式系统的。

3 个答案:

答案 0 :(得分:3)

使用#pragma message "__GNUC__=" __GNUC__在编译时输出它。 http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

答案 1 :(得分:3)

要单独扩展,只需

    echo __GNUC__ | cc -E -

要展开包含该文件的文件,cc -E filename

答案 2 :(得分:2)

gcc的选项-dM会吐出内部定义的所有宏。像

这样的东西
gcc -xc -dM -E /dev/null | sort | less

应该这样做。