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

时间:2009-12-23 08:59:57

标签: 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

但是当我运行该程序时,一切都按预期正常:

./main
  sizeof(unsigned long long)==8
  value of v==0xffffeeeeddddcccc

二手环境:

  • 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;
}

1 个答案:

答案 0 :(得分:12)

根据C ++标准2.13.1 / 2:

  

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

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

unsigned long long v=0xffffeeeeddddccccULL;