Tôi đang gặp sự cố mà tôi chắc chắn là đơn giản để khắc phục nhưng tôi bị lỗ ...Khắc phục cảnh báo "so sánh luôn luôn là sai ..." trong GCC
Tôi có mẫu thực hiện đoạn mã sau:
T value = d;
if (std::numeric_limits<T>::is_signed)
{
if (value < 0)
{
*this += _T("-");
value = -(signed)value;
}
}
Bây giờ cho, lý do rõ ràng, GCC là cho tôi một cảnh báo (so sánh luôn là sai do nhiều hạn chế về kiểu dữ liệu) khi mã này được biên soạn cho một kiểu unsigned. Tôi hoàn toàn hiểu được lý do đằng sau này và tôi đặt trong kiểm tra numeric_limits để xem nếu tôi có thể nhận được trình biên dịch để đóng lên về nó (nó làm việc cho MSVC). Than ôi theo GCC tôi nhận được cảnh báo. Có cách nào (ngắn tắt cảnh báo mà tôi thậm chí không biết nếu bạn có thể làm với GCC) để khắc phục cảnh báo này? Mã sẽ không bao giờ được gọi là anyway và tôi sẽ giả định người tối ưu hóa sẽ biên dịch nó ra là tốt, nhưng tôi không thể thoát khỏi cảnh báo.
Ai đó có thể cho tôi giải pháp cho vấn đề này không?
Chúc mừng!
Đây là RẤT khó chịu khi 'int' là 16 bit. Khi 'giá trị' dài, giá trị' value = - (signed/* int * /) 'cắt ngắn giá trị lớn hơn. Nhân với '-1' thay vào đó, và để cho trình tối ưu hóa tìm ra nó. – MSalters