Щоб визначити, чи надається ціле число фіксованої ширини, ви можете перевірити, чи є один із відповідних [U]INT*_MAX
або[U]INT*_MIN
макросів.
// may be necessary for your C++ implementation
#define __STDC_LIMIT_MACROS
#include <cstdint>
#ifdef INT32_MAX
// int32_t must be available to get here
int32_t some32bitIntVariable;
#endif
За 7,20 типів цілих чисел<stdint.h>
, пункт 4 стандарту C11 (зверніть увагу на напівжирні частини):
Для кожного типу, описаного в цьому документі, який надає реалізація, слід <stdint.h>
оголосити це typedef
ім'я та визначити пов'язані макроси . І навпаки, для кожного описаного тут типу, який реалізація не надає, <stdint.h>
не слід оголошувати це typedef
ім'я не повинно а також не визначати пов'язані макроси .
C ++ успадковує реалізацію C через <cstdint>
. Дивіться <cstdint>
vs<stdint.h>
для отримання детальної інформації. Також див. Що __STDC_LIMIT_MACROS
і що __STDC_CONSTANT_MACROS
означає?для детальної інформації про __STDC_LIMIT_MACROS
.
Таким чином, якщо int32_t
вона є, INT32_MAX
і INT32_MIN
повинна бути #define
d. І навпаки, якщо int32_t
немає, ні, INT32_MAX
ніINT32_MIN
дозволено бути #define
«д.
Зауважте, що, як заявлено @NicolBolas в іншій відповіді , перевірити це, можливо, не потрібно.
#if defined(INT8_MIN)