g ++:警告:整数常量对于'long'类型来说太大了

7 c++ g++

我能做什么(以编程方式)摆脱警告?

 ...
 unsigned long long v=(unsigned long long)0xffffeeeeddddcccc;
 ...

g++ main.cpp -o main
main.cpp:6: warning: integer constant is too large for ‘long’ type
Run Code Online (Sandbox Code Playgroud)

但是当我运行程序时,一切都很好,如预期的那样:

./main
  sizeof(unsigned long long)==8
  value of v==0xffffeeeeddddcccc
Run Code Online (Sandbox Code Playgroud)

使用环境:

  • Ubuntu-Karmic 32bit
  • g ++版本:v4.4.1

编辑:这是完整和可编译的main.cpp

#include <iostream>
#include <iomanip>
using namespace std;

int main(void) {
  unsigned long long v=(unsigned long long)0xffffeeeeddddcccc;
  const unsigned v_size = sizeof(unsigned long long);
  cout << "sizeof(unsigned long long)==" << v_size << endl;
  cout << "value of v==0x" << setw(v_size) << setfill('0') << hex << v << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*sky 12

根据C++标准2.13.1/2:

整数文字的类型取决于其形式,值和后缀.如果它是十进制且没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,long int; 如果该值不能表示为long int,则行为未定义.

新的C++标准允许使用ull后缀.g ++ 4.4.1支持此后缀以及Visual C++ 2008.您可以按如下方式使用它:

unsigned long long v=0xffffeeeeddddccccULL;
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢用大写字母书写`ULL`和其他后缀,以便它们在视觉上截然不同.有了'u`,这可能不是一个很大的问题,但只有`l`或`ll`它太容易被误认为是'1'. (2认同)