【发布时间】:2014-06-22 13:35:50
【问题描述】:
我知道以前在堆栈溢出时已经问过这个问题,但我已经尝试了所有建议的解决方案,但没有任何效果。我的问题很简单,我正在尝试定义一个无符号长整数,它必须采用允许的最大可能值。
#define SIZEOF_ULONG (sizeof(long) * 8);
#define LARGEST_VALUE (1ULL << ((SIZEOF_ULONG)-1));
其中 ulong 的类型定义为 unsigned long。我收到一个警告,左移计数 >= 类型宽度。我在我的 64 位机器上检查了 unsigned long 的大小,它是 8B。最后,我尝试使用 -m64 标志进行编译,但都是徒劳的。
有什么想法吗?
【问题讨论】:
-
它应该是
sizeof(unsigned long)*CHAR_BIT以获得更多可移植性