左移计数> =类型的宽度

New*_*oid 0 c c++ g++ bit-shift

我知道这个先前已经被问过堆栈溢出的东西,但我已经尝试了所有建议作为解决方案,但没有任何作用.我的问题很简单,我正在尝试定义一个unsigned long,它必须采用允许的最大可能值.

#define SIZEOF_ULONG (sizeof(long) * 8);
#define LARGEST_VALUE (1ULL << ((SIZEOF_ULONG)-1));
Run Code Online (Sandbox Code Playgroud)

其中ulong的typedef为无符号长.我收到一个警告,左移计数> =类型的宽度.我在我的64位机器上检查了unsigned long的大小,它是8B.最后,我尝试使用-m64标志进行编译,但都是徒劳的.

有任何想法吗?

M O*_*ehm 5

发生错误,因为您的宏包含分号.首先修复这些错误,然后编译代码.

(我想发出了关于位移的警告,因为编译器会看到类似的东西1ull << 64; - 1.真正的错误是分号,但也会发出移位64位的警告.)

另外,请与类型保持一致.在你的简短片段中,你混合使用无符号long,unsigned long long(ULL)和long.