如何检查是否定义了固定宽度的整数
How to check if fixed width integers are defined
在 C++ 中,定宽整数定义为 optional,但我似乎找不到推荐的方法来检查它们是否实际定义。
检查固定宽度整数是否可用的可移植方法是什么?
从广义上讲......你没有。
如果您需要使用固定大小的整数类型,那么这意味着您明确地需要那些具有特定大小的类型。也就是说,如果您无法获得这些大小的整数,您的代码将无法运行。所以你应该只使用它们;如果有人在缺少上述类型的编译器上使用您的代码,那么您的代码将无法编译。这很好,因为你的代码如果编译就不会工作。
如果您实际上 不需要 固定大小的整数,而只是出于其他原因需要它们,请使用 int_least_*
类型。如果实现可以为您提供准确的大小,那么 least_*
类型将具有该大小。
要确定是否提供了固定宽度的整数类型,您可以检查是否定义了相应的 [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
Per 7.20 Integer types <stdint.h>
, paragraph 4 of the C11 standard(注意粗体部分):
For each type described herein that the implementation provides, <stdint.h>
shall declare that typedef
name and define the associated macros. Conversely, for each type described herein that the implementation does not provide, <stdint.h>
shall not declare that typedef
name nor shall it define the associated macros.
C++ 通过<cstdint>
继承了 C 实现。有关 __STDC_LIMIT_MACROS
.
的详细信息,请参阅 <cstdint>
vs <stdint.h>
for some details. Also see What do __STDC_LIMIT_MACROS
and __STDC_CONSTANT_MACROS
mean?
因此,如果 int32_t
可用,INT32_MAX
和 INT32_MIN
必须 #define
。相反,如果 int32_t
不可用,则 INT32_MAX
和 INT32_MIN
都不允许 #define
。
不过请注意,,可能没有必要实际检查。
在 C++ 中,定宽整数定义为 optional,但我似乎找不到推荐的方法来检查它们是否实际定义。
检查固定宽度整数是否可用的可移植方法是什么?
从广义上讲......你没有。
如果您需要使用固定大小的整数类型,那么这意味着您明确地需要那些具有特定大小的类型。也就是说,如果您无法获得这些大小的整数,您的代码将无法运行。所以你应该只使用它们;如果有人在缺少上述类型的编译器上使用您的代码,那么您的代码将无法编译。这很好,因为你的代码如果编译就不会工作。
如果您实际上 不需要 固定大小的整数,而只是出于其他原因需要它们,请使用 int_least_*
类型。如果实现可以为您提供准确的大小,那么 least_*
类型将具有该大小。
要确定是否提供了固定宽度的整数类型,您可以检查是否定义了相应的 [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
Per 7.20 Integer types <stdint.h>
, paragraph 4 of the C11 standard(注意粗体部分):
For each type described herein that the implementation provides,
<stdint.h>
shall declare thattypedef
name and define the associated macros. Conversely, for each type described herein that the implementation does not provide,<stdint.h>
shall not declare thattypedef
name nor shall it define the associated macros.
C++ 通过<cstdint>
继承了 C 实现。有关 __STDC_LIMIT_MACROS
.
<cstdint>
vs <stdint.h>
for some details. Also see What do __STDC_LIMIT_MACROS
and __STDC_CONSTANT_MACROS
mean?
因此,如果 int32_t
可用,INT32_MAX
和 INT32_MIN
必须 #define
。相反,如果 int32_t
不可用,则 INT32_MAX
和 INT32_MIN
都不允许 #define
。
不过请注意,