g++警告:整数常量对于“long”类型太大了。

7

我可以通过编程做什么来消除这个警告?

 ...
 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 32位
  • 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个回答

12
根据 C++ 标准 2.13.1/2:
整数字面值的类型取决于其形式、值和后缀。如果它是十进制并且没有后缀,则它具有表示其值的第一个类型:intlong int;如果其值不能表示为 long int,则行为未定义。
新的 C++ 标准允许使用 ull 后缀。g++ 4.4.1 和 Visual C++ 2008 均支持此后缀。您可以按以下方式使用它:
unsigned long long v=0xffffeeeeddddccccULL;

我以前从未见过这个“ull”的东西。你能给我一个参考资料吗? - anon
ull 是新的 C++ 标准的一部分。g++ 4.4.1 支持这个后缀。 - Kirill V. Lyadvinsky
2
我更喜欢将ULL和其他后缀写成大写字母,以便它们在视觉上有所区别。由于有u,这可能并不是那么重要,但仅使用lll很容易将其误认为是1 - JaakkoK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接