Để xác định xem loại số nguyên có chiều rộng cố định được cung cấp hay không, bạn có thể kiểm tra xem một trong hai loại macro [U]INT*_MAX
hoặc tương ứng [U]INT*_MIN
có được xác định hay không.
// 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
Trên 7,20 loại Số nguyên<stdint.h>
, đoạn 4 của tiêu chuẩn C11 (lưu ý các phần được in đậm):
Đối với mỗi loại được mô tả trong tài liệu này mà việc triển khai cung cấp, <stdint.h>
sẽ khai báo typedef
tên đó và xác định các macro liên quan . Ngược lại, đối với mỗi loại được mô tả ở đây mà việc triển khai không cung cấp, <stdint.h>
sẽ không khai báo typedef
tên đó cũng như không xác định các macro liên quan .
C ++ kế thừa việc thực hiện C thông qua <cstdint>
. Xem <cstdint>
vs<stdint.h>
để biết một số chi tiết. Cũng xem những gì làm __STDC_LIMIT_MACROS
và __STDC_CONSTANT_MACROS
có nghĩa là gì? để biết chi tiết về __STDC_LIMIT_MACROS
.
Vì vậy, nếu int32_t
có sẵn, INT32_MAX
và INT32_MIN
phải là #define
'd. Ngược lại, nếu int32_t
không có sẵn, INT32_MAX
cũng không INT32_MIN
được phép trở thành #define
'd.
Tuy nhiên, xin lưu ý, như @NicolBolas đã nêu trong một câu trả lời khác , có thể không cần thiết phải thực sự kiểm tra.
#if defined(INT8_MIN)