Sabit genişlikli bir tamsayı türü sağlanmış olup olmadığını belirlemek için, karşılık gelen [U]INT*_MAX
veya [U]INT*_MIN
makrolardan 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 typedef
ad ve ilgili makrolar tanımlanmalıdır . Tersine, burada tarif edilen ve uygulamanın sağlamadığı her tip için, <stdint.h>
bu typedef
ismi 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_MACROS
ve __STDC_CONSTANT_MACROS
ortalama? ayrıntılar için __STDC_LIMIT_MACROS
.
Bu nedenle, eğer int32_t
kullanılabilir, INT32_MAX
ve INT32_MIN
olmalıdır #define
d'. Tersine, eğer int32_t
mevcut değilse, ne INT32_MAX
de ne de INT32_MIN
izin verilmez #define
'd.
Yine de, @NicolBolas'ın başka bir cevapta belirttiği gibi , gerçekten kontrol etmek gerekmeyebilir.
#if defined(INT8_MIN)