Что означают __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, который указывает, что это за реализация.

Другие вопросы по тегам