Untuk menentukan apakah tipe integer lebar tetap disediakan, Anda dapat memeriksa apakah salah satu dari yang sesuai [U]INT*_MAXatau [U]INT*_MINmakro didefinisikan.
// 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
Per 7.20 Jenis integer<stdint.h> , paragraf 4 dari standar C11 (perhatikan bagian yang dicetak tebal):
Untuk setiap jenis yang dijelaskan di sini yang disediakan oleh implementasi, <stdint.h>harus menyatakan typedefnama itu dan mendefinisikan makro terkait . Sebaliknya, untuk setiap jenis yang dijelaskan di sini bahwa implementasi tidak menyediakan, <stdint.h>tidak boleh menyatakan typedefnama itu atau mendefinisikan makro terkait .
C ++ mewarisi implementasi C melalui <cstdint>. Lihat <cstdint>vs<stdint.h> untuk beberapa detail. Juga lihat Apa artinya __STDC_LIMIT_MACROSdan __STDC_CONSTANT_MACROSartinya? untuk detail tentang __STDC_LIMIT_MACROS.
Dengan demikian, jika int32_ttersedia, INT32_MAXdan INT32_MINharus #define'd. Sebaliknya, jika int32_ttidak tersedia, keduanya INT32_MAXtidak INT32_MINdiizinkan untuk menjadi #define'd.
Catat juga, seperti yang dikatakan @NicolBolas dalam jawaban lain , mungkin tidak perlu benar-benar memeriksa.
#if defined(INT8_MIN)