Tôi có một số mã sử dụng literals số nguyên lớn như sau:Làm thế nào để bịt miệng cảnh báo hằng số nguyên dài dài từ GCC
if(nanoseconds < 1'000'000'000'000)
Điều này cho phép trình biên dịch cảnh báo integer constant is too large for 'long' type [-Wlong-long]
. Tuy nhiên, nếu tôi thay đổi thành:
if(nanoseconds < 1'000'000'000'000ll)
... Thay vào đó, tôi nhận được cảnh báo use of C++11 long long integer constant [-Wlong-long]
.
Tôi muốn tắt cảnh báo này chỉ dành cho dòng này, nhưng không tắt -Wlong-dài hoặc sử dụng -Wno-long-long cho toàn bộ dự án. Tôi đã thử xung quanh nó với:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
...
#pragma GCC diagnostic pop
nhưng điều đó dường như không hoạt động ở đây với cảnh báo này. Có cái gì khác tôi có thể thử?
Tôi đang xây dựng với -std=gnu++1z
.
Edit: ví dụ tối thiểu cho ý kiến:
#include <iostream>
auto main()->int {
double nanoseconds = 10.0;
if(nanoseconds < 1'000'000'000'000ll) {
std::cout << "hello" << std::endl;
}
return EXIT_SUCCESS;
}
Tòa nhà có g++ -std=gnu++1z -Wlong-long test.cpp
cho test.cpp:6:20: warning: use of C++11 long long integer constant [-Wlong-long]
tôi nên đề cập này là trên một nền tảng 32bit, Windows với MinGW-w64 (gcc 5.1.0) - cảnh báo đầu tiên dường như không xuất hiện trên hệ thống Linux 64 bit của tôi, nhưng cảnh báo thứ hai (với hậu tố ll
) xuất hiện trên cả hai.
tôi không thể tái tạo cảnh báo này và nó cũng không có ý nghĩa gì vì tại sao các tính năng C++ 11 không có sẵn với '-std = gnu ++ 1z'? Bạn có thể hiển thị một ví dụ làm việc tối thiểu và cung cấp cho phiên bản trình biên dịch chính xác của bạn và cờ bạn sử dụng? – 5gon12eder
'dài nano giây = 10; if (nanoseconds <1000000000000ll) std :: cout << 1000000000000ll; 'làm việc cho tôi trong' gcc5.2' với tùy chọn '-std = gnu ++ 1z' – gjha
Tôi đã cập nhật câu hỏi với một ví dụ tối thiểu và một dòng lệnh để tái tạo . Tôi đồng ý nó không có ý nghĩa để cảnh báo về việc sử dụng các tính năng C++ 11 trong tình huống này. – Riot