gcc 4.1.2:错误:整数常量对于'long'类型来说太大了

Ton*_*ony 5 c++ hash gcc g++

我编译了一段关于哈希函数的代码并得到了错误:整数常量对于'long'类型来说太大了.我做谷歌它,它说添加后缀"ULL",但我确实有ULL作为后缀.这个后缀仅由gcc 4.4.1支持,我在机器上只有gcc 4.1.2,我不允许安装新的编译器.有没有办法改变代码,以解决问题?

谢谢,-Tony

unsigned long long hash(string k){ //FNV hash
   unsigned long long x = 14695981039346656037ULL;
   for (unsigned int y=0;y<k.length();y++){
      x = x ^ (k[y]);
      x = x * 1099511628211;
   }
   return (x);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 7

1099511628211(32位)也太大了long; 在ULL那里添加后缀.

AFAIK,GCC 4. x支持long long所有x.事实上,我会说,海湾合作委员会3 X的支持long long,至少在最近的值X.

我很难让你的代码在32位或64位模式下使用GOS 4.6.1在MacOS X 10.7.2上触发任何警告.但是,我可以从XCode 4.x(g++ --version输出开始i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00))获得LLVM编译器的抱怨,直到我添加第二个ULL,但只有在32位模式下编译时才会抱怨.如果在64位模式下使用它,它也不会抱怨.