【发布时间】:2016-12-14 04:13:44
【问题描述】:
我正在尝试做一些非常简单的事情,但我收到了这个警告。这是我所拥有的:
#define VERSION ( (unsigned long)( (CORE_ID << 32) + (PROTO_ID << 24) + (VERSION_ID << 16) + (RELEASE_ID << 8) + (HOTFIX_ID) ) )
unsigned long vern = VERSION;
我不断收到左移计数 >= 类型宽度的警告,但我没有做任何事情来帮助摆脱此消息。我尝试单独转换为 unsigned int 但这也无济于事。 所有 ID 都只是数字的常规 #define。
我尝试将 UL 添加到每个数字的末尾,但这也无济于事。我知道这意味着我的移位导致溢出,但考虑到一切都被定义为 UL,我不确定如何补救。 我不确定我做错了什么,感谢任何帮助。
非常感谢
【问题讨论】:
-
CORE_ID的类型是什么? -
CORE_ID << 32-->1ull*CORE_ID << 32,同样适用于PROTO_ID。更好的是,发布所有与此相关的#define,例如CORE_ID等。 -
#define HW 80 #define REV 5 #define CORE_ID 7 #define PROTO_ID 7 #define VERSION_ID (HW+REV) #define RELEASE_ID 07 #define HOTFIX_ID 01
-
“尝试将 UL 添加到每个号码的末尾”不清楚。发布失败的代码比描述失败的代码更有用。
-
试试
#define VERSION ( (1ull*CORE_ID << 32) + (1ull*PROTO_ID << 24) + (1ul*VERSION_ID << 16) + (1ul*RELEASE_ID << 8) + (1ul*HOTFIX_ID) )
标签: c++