2011-12-09 7 views
2

私は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()は、組み込みシステム用の出力であるため、このコンパイラでは機能しません。コンパイル時に出力する

答えて

2

gccのオプション-dMには、内部的に定義されているすべてのマクロがあります。何かのように

gcc -xc -dM -E /dev/null | sort | less 

トリックを行う必要があります。それを含むファイルを展開するには、一人だけ

echo __GNUC__ | cc -E - 

をして展開し

+1

+1、私は出力を' sort(1) 'にパイプするのが好きです。デフォルトではソートされていないからです。 –

+1

@AdamRosenfield、確かに、そのようなことが明らかだと思った:) –

3

使用#pragma message "__GNUC__=" __GNUC__それは。 http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

+0

これを行うとき、私は実際には '__GNUC__'のための任意の値を得ることはありません。 limits.hファイルが含まれていない場合は含まれていますが、それは感覚を作ります。しかし、 '__GNUC__'は常に定義されるバージョン情報です... –

関連する問題