Что означают __STDC_LIMIT_MACROS и __STDC_CONSTANT_MACROS? - PullRequest
33 голосов
/ 12 июня 2009

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

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

Ответы [ 4 ]

45 голосов
/ 12 июня 2009

__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 ++, но было принято более чем одной реализацией.

5 голосов
/ 23 октября 2014

Указанная проблема исчезла. C99 - это старый стандарт, поэтому он был явно отменен в стандарте C ++ 11, и, как следствие, C11 удалил это правило.

Более подробная информация там:

3 голосов
/ 12 июня 2009

В stdint.h в C ++ они определяют, нужно ли определять макросы, например INT32_MAX или INT32_C(v). Для получения дополнительной информации см. stdint.h вашей платформы.

0 голосов
/ 12 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...