Подтвердить что ты не робот

Что означают __STDC_LIMIT_MACROS и __STDC_CONSTANT_MACROS?

Я вижу это в стандартных библиотеках С++ для моей системы, а также в некоторых заголовках в библиотеке, которую я использую.

Какова семантика этих двух определений? Есть ли хорошая ссылка для #defines, подобного этому, кроме самого источника?

4b9b3361

Ответ 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 удалил это правило.

Подробнее там:

Ответ 4

Макросы не являются частью стандарта С++ и, вероятно, используются для внутренних целей в вашей реализации на С++. Если вы хотите узнать больше о них, вы должны задать вопрос с atag, который указывает, что это за реализация.