在C99,我包括stdint.h和这使我UINT32_MAX以及uint32_t的。然而,在C ++中UINT32_MAX被定义出来。我可以包括stdint.h之前定义__STDC_LIMIT_MACROS,但如果有人包括已包括stdint.h自己后,我的头不能正常工作。

因此,在C ++中,什么是一个uint32_t的找出表示的最大值的标准方式?

有帮助吗?

解决方案

好了,我不知道uint32_t但对于基本类型(bool, char, signed char, unsigned char, wchar_t, short, unsigned short, int, unsigned int, long, unsigned long, float, double and long double),你应该通过numeric_limits使用#include <limits>模板。

cout << "Minimum value for int: " << numeric_limits<int>::min() << endl;
cout << "Maximum value for int: " << numeric_limits<int>::max() << endl;

如果uint32_t是上述中的一个的#define比这个代码应工作箱的出

    cout << "Maximum value for uint32_t: " << numeric_limits<uint32_t>::max() << endl;

其他提示

std::numeric_limits<T>::max()定义了类型T的最大值。

那么,uint32_t的永远是32位,并且永远是无符号的,因此可以安全地手动进行定义:

#define UINT32_MAX  (0xffffffff)

您也可以做

#define UINT32_MAX  ((uint32_t)-1)

您可能能够通过改变你的构建过程,以限定编译器命令行而不是在#include符号消除__STDC_LIMIT_MACROS顺序问题:

cxx -D__STDC_LIMIT_MACROS ...

当然,你仍然有麻烦,如果一个头#undefs这个符号。

此外,您正在使用的标准库实现的作者可能没有打算为用户设置特定的符号;有可能是一个编译器标志或用户意图用于启用在C ++ C99类型不同的符号。

我无法评论,所以这里是我的格伦输入VS高根利奥尔的答案。

如果您使用的是静态变量,你会碰到的问题,如果你指定一个恒定值的类numeric_limits内部:: MAX(),该值将在实际上设置为零,因为初始化的顺序(见本交零初始化和局部范围静态变量的静态初始化

因此,在这种情况下,它只会通过使用利奥尔高根的答复工作。

// This looks cleaner, less error prone and easier to read than the other suggested by Lior Kogan
#define UINT32_MAX  ((uint32_t)-1)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top