UINT32_MAX 的 C 等价物是什么?

新手上路,请多包涵

在 C99 中,我包括 stdint.h 这给了我 UINT32_MAX 以及 uint32_t 数据类型。然而,在 C++ 中, UINT32_MAX 被定义了。我可以在包含 --- __STDC_LIMIT_MACROS stdint.h ,但是如果有人在已经包含 stdint.h 自己之后包含我的标题,这将不起作用。

那么在 C++ 中,找出 uint32_t 中可表示的最大值的标准方法是什么?

原文由 kdt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

Not sure about uint32_t , but for fundamental types ( bool , char , signed char , unsigned char , wchar_t , short , unsigned short , int , unsigned int , long , unsigned long , float , double and long double ) you can use the numeric_limits templates via #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;

原文由 Glen 发布,翻译遵循 CC BY-SA 4.0 许可协议

我无法发表评论,所以这是我对 Glen vs Lior Kogan 的回答的意见。

如果您使用的是静态变量,您将遇到这样的问题,即如果您在类中为 numeric_limits::max() 分配一个常量值,由于初始化的顺序,该值实际上将设置为零(请参阅这篇文章 零初始化和局部范围静态变量的静态初始化

因此,在这种情况下,它只能通过使用 Lior Kogan 的答案来工作。

 // This looks cleaner, less error prone and easier to read than the other suggested by Lior Kogan
#define UINT32_MAX  ((uint32_t)-1)

原文由 Robert Rodriguez 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏