Có một lá cờ cho gcc sao cho các chuyển đổi từ dài đến ngắn sẽ tạo ra cảnh báo về khả năng mất dữ liệu?Có cảnh báo gcc 4.2 tương tự như Visual Studio liên quan đến việc mất dữ liệu không?
Tôi đang làm việc trên ứng dụng C++ được biên dịch cho cả Visual Studio (2005) và GCC 4.2 (dành cho Mac OS X).
Những cảnh báo rằng Visual Studio in ra theo mô hình này:
: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data
Tôi đã thử -Wconversion, nhưng đó không phải là khá những gì tôi đang tìm kiếm. Điều duy nhất tôi đã có thể tìm thấy cho đến nay là một lá cờ thử nghiệm, -Wcoercion, được liên kết với GCC 4.3 (mà tôi không chắc chắn nếu chúng ta muốn đầu tư khá).
ngày 22 tháng 4 năm 2009 @ 11:00 EST Chỉnh sửa: Để làm rõ, tôi muốn thấy cảnh báo đó. Chúng tôi có mã nơi chúng tôi muốn biết khi nào mất dữ liệu sẽ xảy ra. Nếu tôi có mã:
unsigned long value1 = LONG_MAX;
std::cout << "value1: " << value1 << std::endl;
unsigned short value2 = value1;
std::cout << "value2: " << value2 << std::endl;
tôi nhận được kết quả mong đợi này:
value1: 2147483647
value2: 65535
Trong mã của chúng tôi, chúng tôi có đặc biệt khẳng định đưa ra tại chỗ thực hiện cưỡng chế và cảnh báo chúng ta nếu mã thực hiện sẽ dẫn đến mất dữ liệu. Chúng tôi tìm thấy các địa điểm trong cơ sở mã lớn của chúng tôi bằng cách sử dụng cảnh báo của Visual Studio.
Có cách nào để chúng tôi có thể tạo các cảnh báo này trong gcc 4.2 không?
Để xác thực mất dữ liệu có thể, hãy thử '-Wshorten-64-to-32'. '-Wconversion' cũng sẽ kiểm tra các lỗi đã ký (có thể là quá mức cần thiết). – rustyx
'-Wshorten-64-to-32' không được GCC chấp nhận, chỉ bởi Clang. – Andy