我必须像这样定义常量:
#define MY_CONSTANT 0xBEEF
我想确保我的常量将被视为 32 位。
我可以像这样使用 (uint32_t) 转换:
#define MY_CONSTANT (uint32_t)0xBEEF
或者像这样的 UL 后缀:
#define MY_CONSTANT 0xBEEFUL
这两个版本是否完全等价?
我会说不,因为 UL 等同于 unsigned long
并且 unsigned long
长度可能取决于 CPU。
C99 标准确保 uint32_t
整数是 32 位,但我认为它不能确保 UL
后缀也是如此。
最佳答案
你是对的,由于你提到的原因,它们并不等同。无法保证 uint32_t
是 unsigned long
的别名。如有必要,将转换包含在 #define
中。
您应该使用括号,请参阅@Keith Thompson 的评论,这是一个很好的理由;否则 sizeof
将不起作用。
关于c - UL 后缀与 uint32_t 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35483362/