Sabit genişlikli bir tamsayı türü sağlanmış olup olmadığını belirlemek için, karşılık gelen [U]INT*_MAXveya [U]INT*_MINmakrolardan birinin tanımlanıp tanımlanmadığını kontrol edebilirsiniz .
// 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
Başına 7.20 Tamsayı tipleri<stdint.h> , C11 standardının paragrafında 4 (kalın parçalar dikkat edin):
Burada açıklanan her tip için uygulamanın <stdint.h>belirttiği typedefad ve ilgili makrolar tanımlanmalıdır . Tersine, burada tarif edilen ve uygulamanın sağlamadığı her tip için, <stdint.h>bu typedefismi beyan etmemeli veya ilişkili makroları tanımlamamalıdır .
C ++, C uygulamasını üzerinden devralır <cstdint>. Bkz <cstdint>vs<stdint.h> bazı detaylar için. Ayrıca bakınız ne yapıyoruz __STDC_LIMIT_MACROSve __STDC_CONSTANT_MACROSortalama? ayrıntılar için __STDC_LIMIT_MACROS.
Bu nedenle, eğer int32_tkullanılabilir, INT32_MAXve INT32_MINolmalıdır #defined'. Tersine, eğer int32_tmevcut değilse, ne INT32_MAXde ne de INT32_MINizin verilmez #define'd.
Yine de, @NicolBolas'ın başka bir cevapta belirttiği gibi , gerçekten kontrol etmek gerekmeyebilir.
#if defined(INT8_MIN)