Nic*_*las 20
从广义上讲......你没有。
如果您需要使用固定大小的整数类型,那么这意味着您明确需要这些类型具有其特定大小。也就是说,如果您无法获得这些大小的整数,您的代码将无法运行。所以你应该只使用它们;如果有人在缺少上述类型的编译器上使用您的代码,那么您的代码将无法编译。这很好,因为如果它确实编译了,你的代码就不会工作。
如果您实际上不需要固定大小的整数,而只是出于其他原因需要它们,请使用int_least_*
类型。如果实现可以为您提供准确的大小,则least_*
类型将具有该大小。
And*_*nle 19
要确定是否提供了固定宽度的整数类型,您可以检查是否定义了相应的[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
Run Code Online (Sandbox Code Playgroud)
根据7.20 Integer types<stdint.h>
,C11 标准的第 4 段(注意粗体部分):
对于实现提供的此处描述的每种类型,
<stdint.h>
应声明该typedef
名称并定义关联的宏。相反,对于实现未提供的此处描述的每种类型,<stdint.h>
不应声明该typedef
名称,也不应定义关联的宏。
C++ 通过<cstdint>
. 有关详细信息,请参阅<cstdint>
vs。<stdint.h>
还看到什么__STDC_LIMIT_MACROS
和__STDC_CONSTANT_MACROS
意味着什么呢?有关详细信息__STDC_LIMIT_MACROS
。
因此,如果int32_t
可用,INT32_MAX
并且INT32_MIN
必须是#define
'd。相反,如果int32_t
不可用,则既不允许INT32_MAX
也INT32_MIN
不允许#define
'd。
但请注意,正如@NicolBolas 在另一个答案中所述,实际检查可能没有必要。