如何修复此编译器警告的原因?

use*_*747 1 c 32bit-64bit

以下代码是生产时我编译它在32位系统的警告: 1087: warning: integer constant is too large for "long" type; 我怎么能解决这个问题所以我没有得到那个警告,它在32位上运行正常?

有效的输入是:

unsigned char str[] = "\x00\x17\x7c\x3a\x67\x4e\xcb\x01";
Run Code Online (Sandbox Code Playgroud)

并且mypow函数返回unsigned long long.

     unsigned long long high, low, nano;
     high = // line 1087
         (str[7]&0xff) * mypow(2,56) +
         (str[6]&0xff) * mypow(2,48) +
         (str[5]&0xff) * mypow(2,40) +
         (str[4]&0xff) * mypow(2, 32);
     low =
         (str[3]&0xff) * mypow(2,24) +
         (str[2]&0xff) * mypow(2,16) +
         (str[1]&0xff) * mypow(2,8) +
         (str[0]&0xff);
     nano = ((high + low)/10000000) - (unsigned long long)11644473600;
     return localtime((time_t*)&nano);
Run Code Online (Sandbox Code Playgroud)

bta*_*bta 6

如果在代码中使用的常量不适合32位,请LL在其末尾添加一个常量,以便编译器知道它应该是一个"long long"类型.例如,该nano =行末尾的常量应该是11644473600LL.当前代码常量强制转换为a long long,但常量本身是常规的,long因为没有明确的LL后缀.

  • 根据类型,"ULL"可能是正确的后缀. (2认同)