2010-01-04 24 views
6
int i = 3.1/2 

không gây ra bất kỳ cảnh báo nào, ngay cả với tùy chọn -Cách. Đôi khi, tôi muốn biết độ chính xác bị mất. Tại sao gcc không hỗ trợ cảnh báo này, trong khi msvc hỗ trợ cảnh báo này?Tại sao việc gán đôi thành int không kích hoạt cảnh báo gcc?

cảm ơn.

EDIT: -v gcc của tôi cho thấy

Configured with: ../../gcc-4.4.1/configure --prefix=/mingw --build=mingw32 --enable-languages=c,ada,c++,fortran,objc,obj-c++ --disable-nls --disable-win32-registry --enable-libgomp --enable-cxx-flags='-fno-function-sections -fno-data-sections' --disable-werror --enable-threads --disable-symvers --enable-version-specific-runtime-libs --enable-fully-dynamic-string --with-pkgversion='TDM-2 mingw32' --enable-sjlj-exceptions --with-bugurl=http://www.tdragon.net/recentgcc/bugs.php

+2

Có thể hữu ích khi biết rằng -Wall không bật tất cả các cảnh báo hiện được trình biên dịch hỗ trợ. Đó là một bộ cảnh báo đã có sẵn vài năm trước. Sử dụng -Wextra thêm một vài chi tiết, mặc dù tôi không chắc chắn liệu ngay cả điều đó có bao gồm cảnh báo cắt ngắn hay không. – Dipstick

+5

Có thể cho rằng, trước tiên bạn phải có cảnh báo cho "3.1", vì con số này không thể được biểu diễn chính xác trong một điểm nổi kép IEEE 754. Và đây có thể là lý do tại sao gcc không cảnh báo bạn: bạn sẽ nhận được rất nhiều cảnh báo rằng chúng sẽ không hữu ích. –

+1

@chrisharris: ngay cả với -Wall -Wextra -ansi -pedantic, nó không hoạt động. – Jichao

Trả lời

10

-Wconversion cảnh báo cho chuyển đổi ngầm.

+0

nhưng nó không hoạt động trên gcc-mingw của tôi 3.4.5 – Jichao

+0

Không mingw nhận ra tùy chọn này, hãy kiểm tra bằng cách sử dụng tùy chọn gcc -v biết thêm chi tiết. – Andy

Các vấn đề liên quan