Что означают __STDC_LIMIT_MACROS и __STDC_CONSTANT_MACROS?
Я вижу это в стандартных библиотеках С++ для моей системы, а также в некоторых заголовках в библиотеке, которую я использую.
Какова семантика этих двух определений? Есть ли хорошая ссылка для #defines, подобного этому, кроме самого источника?
Ответ 1
__STDC_LIMIT_MACROS и __STDC_CONSTANT_MACROS являются обходным путем, позволяющим программам на С++ использовать макросы stdint.h, указанные в стандарте C99, которые не входят в стандарт С++. Макросы, такие как UINT8_MAX, INT64_MIN и INT32_C(), могут быть определены уже в приложениях на С++ другими способами. Чтобы позволить пользователю решить, хотят ли они макросы, определенные как C99, многие реализации требуют, чтобы __STDC_LIMIT_MACROS и __STDC_CONSTANT_MACROS были определены до включения stdint.h.
Это не часть стандарта С++, но она была принята более чем одной реализацией.
Ответ 2
В stdint.h под С++ они определяют, следует ли определять макросы, такие как INT32_MAX или INT32_C(v). Дополнительную информацию см. на вашей платформе stdint.h.
Ответ 3
Вышеупомянутый вопрос исчез. C99 является старым стандартом, поэтому это явно было отменено в стандарте С++ 11, и, как следствие, C11 удалил это правило.
Макросы не являются частью стандарта С++ и, вероятно, используются для внутренних целей в вашей реализации на С++. Если вы хотите узнать больше о них, вы должны задать вопрос с atag, который указывает, что это за реализация.