Sau đây là một số mã rõ ràng bị lỗi mà tôi cho rằng trình biên dịch sẽ phát ra một chẩn đoán. Nhưng không phải gcc
cũng không g++
không, ngay cả với tất cả các tùy chọn cảnh báo tôi có thể nghĩ ra: -pedantic -Wall -Wextra
Tôi có thể khiến GCC cảnh báo về việc truyền các loại quá rộng đến các chức năng không?
#include <stdio.h>
short f(short x)
{
return x;
}
int main()
{
long x = 0x10000007; /* bigger than short */
printf("%d\n", f(x)); /* hoping for a warning here */
return 0;
}
Có cách nào để làm cho gcc
và g++
cảnh báo về điều này? Trên một mặt lưu ý, bạn có một trình biên dịch khác cảnh báo về điều này theo mặc định hoặc trong một cấu hình cảnh báo phụ khá phổ biến?
Lưu ý: Tôi đang sử dụng GCC (cả trình biên dịch C và C++) phiên bản 4.2.4.
Chỉnh sửa: Tôi chỉ thấy rằng gcc -Wconversion
hiện các trick, nhưng cùng một lựa chọn để g++
không, và tôi thực sự sử dụng C++ ở đây, vì vậy tôi cần một giải pháp cho g++
(và bây giờ đang tự hỏi tại sao -Wconversion
doesn' t có vẻ là nó).
Chỉnh sửa: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389 gợi ý rằng điều này có thể được sửa trong g++ 4.4
... có thể? Nó không rõ ràng với tôi được nêu ra nếu nó là cùng một vấn đề và/hoặc nếu sửa chữa thực sự đến trong phiên bản đó. Có thể ai đó có 4.3 hoặc 4.4 có thể thử trường hợp thử nghiệm của tôi.
Aha - vì vậy nó chỉ là 4.2.4 quá "cũ" để làm cho nó cảnh báo và tôi có thể thấy 4.3.2 công trình (tôi đang đưa ra một vài giả định ở đây, nhưng tôi nghĩ nó an toàn để nói bởi vì tôi đang sử dụng Ubuntu và tôi thấy một số lưu ý về vấn đề này chỉ cần một cái gì đó cố định trong 4.3 + –
Bây giờ tôi đã thử với GCC 4.3.2 trên một máy Ubuntu Intrepid, và -Wconversion làm những gì tôi muốn.Hoàn thành.Nhưng boo cho 4.2.4 không làm việc .. –
thiếu một đề cập đến -Wign -conversion cho g ++ (cần thiết ít nhất là trong các phiên bản mới hơn) ... – codeling