2016-04-26 11 views
3

gccコンパイラであらかじめ定義されている変数__SIZE_TYPE__が不思議です。gccコンパイラ__SIZE_TYPE__

私はC

typedef __SIZE_TYPE__ size_t; 

で文を次のようにコード化されたと仮定し、私はgccを除く他のCコンパイラを使用するときにエラーが発生したことを任意の可能性はありますか? すべてのCコンパイラは変数__SIZE_TYPE__を持っていますか?

+0

'SIZE_TYPE'または' __SIZE_TYPE__'ですか?ダブルアンダースコアで始まる名前は、特定のコンパイラおよび/またはライブラリであり、ポータブルとはみなされない特定の "実装"に対して一般的に特別です。 –

+1

すべてのCコンパイラは、90年代に詰まっていない限り、 'size_t'を持っています。 C言語で書かれたすべてのソフトウェアは、90年代に詰まっていない限り、 'size_t'を使います。代わりに '__SIZE_TYPE__'を使用したいのですが? –

+2

'__SIZE_TYPE__'は変数ではありません。それはタイプです。 GCC以外のコンパイラは、おそらくGCCと互換性がない限り、それを提供しないでしょう。 'size_t'が必要な場合は、それを定義する他のヘッダ(' '、' '、' 'など)を含まない場合は' 'を含めます。 –

答えて

5

はい、二重のアンダースコアの識別子を使用するとすぐにエラーが発生する可能性があります。

アンダースコアと大文字 文字のいずれか、または別のアンダースコアで始まるすべての識別子は常に使用するために予約されていますCの標準7.1.3を参照してください。

__SIZE_TYPE__は明らかにgcc識別子です。他のコンパイラはそれを使用しているとは思えませんが、保証はありません。全く別の目的でも、別のコンパイラでも同じ識別子を自由に使用することができます。

+0

明確な答えをありがとう! –