2016-06-19 3 views
1

ヘッダが含まれていない変数__PTRDIFF_TYPE__を使用することは合法です。__PTRDIFF_TYPE__のデフォルト値

ISO/IEC 9899でこの変数名を検索しようとしましたが、表示されません。私は第7回のCライブラリの定義を見たいと思っていました。

なぜ合法ですか?

Linux/GNUでgccを使用しています。

+0

あなたはどのコンパイラについて話していますか? – Cornstalks

+0

ああ、私はシステム - linux/gnu、gccを言及するのを忘れた。 – alinsoar

+0

gcc(およびclang)の定義済みマクロを表示するには、次のコマンドを使用します。['gcc -dM -E- Cornstalks

答えて

2

これはgcc(GNU C拡張)の定義済みマクロです。 https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.htmlを参照してください。

理由:標準では、実装で使用する2つのアンダースコア(アンダースコアとすべての名前の後に大文字で始まるすべての名前)が予約されています。したがって、gccは__whateverを事前定義し、 。

+0

ああ、それはGCCの拡張機能ですか?私はそれが他のコンパイラによって使用されていると思う。 – alinsoar

+0

@alinsoar:標準ヘッダーに使用される拡張機能です。おそらく、プラットフォームごとに 'ptrdiff_t'をカスタマイズするための' ifdef'の束よりも簡単かもしれません。上に書いたように、アプリケーションコードでは使用しないでください。 – Olaf

+0

そのマクロを定義するのは実装上合法です。アプリケーションによって自動的に使用されることはありません。標準の視点からは、それは確かに不可能です。 – Olaf