我有一些使用大整数字面量的代码,如下:
if(nanoseconds < 1'000'000'000'000)
这会给编译器警告:整数常量对于'long'类型太大 [-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
进行构建。
编辑:评论区提供了最小示例:
#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 的功能呢?您能否展示一个最小可行的示例,并提供您使用的确切编译器版本和标志? - 5gon12eder((long long)1000000) * 1000000
这样的粗略解决方法怎么样? - Nate Eldredge