thời gian gần đây tôi đã có một lỗi trong một bối cảnh tương tự tiếp theo một:cờ cảnh báo gcc cho các chuyển đổi ngầm
double getSomeValue()
{
return 4.0;
}
...
std::string str;
str = getSomeValue();
Như bạn có thể thấy ở đây rất dễ dàng để phát hiện vấn đề, nhưng trong một cơ sở mã lớn, nơi getSomeValue()
là không phải trong cùng một tệp với mã gọi điện, có thể khó phát hiện việc chuyển đổi im lặng này sang số double
sang std::string
. GCC biên dịch mã này tốt với -Wall -Wextra -Werror
(đầu ra mẫu ở đây, tôi không biết cờ cảnh báo nào đã được sử dụng: http://ideone.com/BTXBFk).
Làm thế nào tôi có thể buộc GCC phát ra cảnh báo cho các chuyển đổi tiềm ẩn nguy hiểm này? Tôi đã thử -Wconversion
, nhưng nó rất nghiêm ngặt và nó gây ra lỗi trong hầu hết các tiêu đề được bao gồm cho các trường hợp phổ biến như unsigned - 1
. Có phiên bản yếu hơn của -Wconversion
không?
Nó thực sự là 'double' →' char' → 'chuyển đổi chuỗi'. Người đầu tiên có thể bị bắt bởi '-Wfloat-conversion' cũng được kích hoạt bởi' -Wconversion' –
@Revolver_Ocelot Cảm ơn bạn, lá cờ này có vẻ là cái tôi đang tìm kiếm. Thật không may nó không có sẵn trong GCC 4.8.2 – Felics
@ DieterLücking Tôi đã chỉ định trong câu hỏi mà tôi không thể sử dụng -Wconversion vì tôi nhận được rất nhiều lỗi cho unsigned - 1 giống như các cấu trúc trong nhiều tiêu đề được bao gồm. – Felics