【发布时间】:2015-11-11 04:43:50
【问题描述】:
我有一些使用大整数文字的代码如下:
if(nanoseconds < 1'000'000'000'000)
这会给编译器警告integer constant is too large for 'long' type [-Wlong-long]。但是,如果我将其更改为:
if(nanoseconds < 1'000'000'000'000ll)
...我收到警告 use of C++11 long long integer constant [-Wlong-long]。
我想仅针对这一行禁用此警告,但不禁用 -Wlong-long 或对整个项目使用 -Wno-long-long。我试过用:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
...
#pragma GCC diagnostic pop
但这似乎不适用于此警告。还有什么我可以尝试的吗?
我正在使用-std=gnu++1z 构建。
编辑:cmets 的最小示例:
#include <iostream>
auto main()->int {
double nanoseconds = 10.0;
if(nanoseconds < 1'000'000'000'000ll) {
std::cout << "hello" << std::endl;
}
return EXIT_SUCCESS;
}
使用g++ -std=gnu++1z -Wlong-long test.cpp 构建会得到test.cpp:6:20: warning: use of C++11 long long integer constant [-Wlong-long]
我应该提到这是在 32 位平台上,带有 MinGW-w64 (gcc 5.1.0) 的 Windows - 第一个警告似乎没有出现在我的 64 位 Linux 系统上,但第二个警告(带有 ll 后缀)出现在两者上。
【问题讨论】:
-
我无法重现此警告,这也没有任何意义,因为为什么
-std=gnu++1z不能提供 C++11 功能?您能否展示一个最小的工作示例并给出您使用的确切编译器版本和标志? -
long long nanoseconds = 10; if(nanoseconds < 1000000000000ll ) std::cout<<1000000000000ll;在gcc5.2中为我工作,带有选项-std=gnu++1z -
我已经用一个最小的例子和一个重现的命令行更新了这个问题。我同意在这种情况下警告使用 C++11 功能是没有意义的。
-
像
((long long)1000000) * 1000000这样的粗略解决方法怎么样? -
@Praetorian 获得您明确要求的警告不是错误。
标签: c++ c++11 gcc gcc-warning long-long