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