我可以(以编程方式)做什么来摆脱警告?
...
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
二手环境:
编辑:这是完整且可编辑的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;
}
答案 0 :(得分: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;