web-dev-qa-db-ja.com

__STDC_LIMIT_MACROSおよび__STDC_CONSTANT_MACROSはどういう意味ですか?

私のシステムの標準C++ライブラリと、使用しているライブラリのヘッダーの一部にこれが見られます。

これら2つの定義の意味は何ですか?ソース自体以外に、このような#definesの適切なリファレンスはありますか?

35
Matthew Willis

___STDC_LIMIT_MACROS_および___STDC_CONSTANT_MACROS_は、C++プログラムがC99標準で指定されているが、C++標準にはない_stdint.h_マクロを使用できるようにするための回避策です。 _UINT8_MAX_、_INT64_MIN_、INT32_C()などのマクロは、他の方法でC++アプリケーションですでに定義されている場合があります。 C99のようにマクロを定義するかどうかをユーザーが決定できるようにするために、多くの実装では___STDC_LIMIT_MACROS_を含める前に___STDC_CONSTANT_MACROS_および_stdint.h_を定義する必要があります。

これはC++標準の一部ではありませんが、複数の実装で採用されています。

47
Dingo

上記の問題は消えました。 C99は古い標準であるため、C++ 11標準ではこれが明示的に却下されており、結果としてC11はこの規則を削除しました。

詳細はこちら:

5
malat

C++の_stdint.h_では、_INT32_MAX_やINT32_C(v)などのマクロを定義するかどうかを制御します。詳細については、プラットフォームの_stdint.h_を参照してください。

3
laalto