Щоб визначити, чи надається ціле число фіксованої ширини, ви можете перевірити, чи є один із відповідних [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повинна бути #defined. І навпаки, якщо int32_tнемає, ні, INT32_MAXніINT32_MIN дозволено бути #define«д.
Зауважте, що, як заявлено @NicolBolas в іншій відповіді , перевірити це, можливо, не потрібно.
#if defined(INT8_MIN)