Rio*_*iot 5 c++ gcc gcc-warning long-long c++11
我有一些使用大整数文字的代码,如下所示:
if(nanoseconds < 1'000'000'000'000)
Run Code Online (Sandbox Code Playgroud)
这给编译器警告integer constant is too large for 'long' type [-Wlong-long].但是,如果我将其更改为:
if(nanoseconds < 1'000'000'000'000ll)
Run Code Online (Sandbox Code Playgroud)
......我反而得到了警告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
Run Code Online (Sandbox Code Playgroud)
但这似乎不适用于此警告.我还能尝试别的吗?
我正在建设-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;
}
Run Code Online (Sandbox Code Playgroud)
建筑用g++ -std=gnu++1z -Wlong-long test.cpp给test.cpp:6:20: warning: use of C++11 long long integer constant [-Wlong-long]
我应该提到这是在一个32位平台,Windows与MinGW-W64(gcc 5.1.0) - 第一个警告似乎没有出现在我的64位Linux系统上,但第二个(带有ll后缀)出现在两者上.
看来使用ll后缀时的C++11警告可能是gcc bug。(感谢@praetorian)
一种解决方法(受 @nate-eldredge 的评论启发)是避免使用文字并在编译时使用 constexpr 生成它:
int64_t constexpr const trillion = int64_t(1'000'000) * int64_t(1'000'000);
if(nanoseconds < trillion) ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |