私のシステムの標準C++ライブラリと、使用しているライブラリのヘッダーの一部にこれが見られます。
これら2つの定義の意味は何ですか?ソース自体以外に、このような#definesの適切なリファレンスはありますか?
___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++標準の一部ではありませんが、複数の実装で採用されています。
上記の問題は消えました。 C99は古い標準であるため、C++ 11標準ではこれが明示的に却下されており、結果としてC11はこの規則を削除しました。
詳細はこちら:
C++の_stdint.h
_では、_INT32_MAX
_やINT32_C(v)
などのマクロを定義するかどうかを制御します。詳細については、プラットフォームの_stdint.h
_を参照してください。