【发布时间】:2010-01-04 12:12:59
【问题描述】:
int i = 3.1 / 2
即使使用 -Wall 选项也不会引起任何警告。有时,我想知道精度损失在哪里。为什么 gcc 不支持此警告,而 msvc 支持此警告?
谢谢。
编辑:我的 gcc -v 显示
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
【问题讨论】:
-
知道 -Wall 不会打开编译器当前支持的所有警告可能很有用。这是几年前可用的一组警告。使用 -Wextra 会增加一些,但我不确定这是否包含截断警告。
-
可以说,您应该首先对“3.1”发出警告,因为这个数字不能在 IEEE 754 浮点双精度中精确表示。这可能是 gcc 不警告您的原因:您会收到太多警告,以至于它们没有用处。
-
@chrisharris:即使使用 -Wall -Wextra -ansi -pedantic,它也不起作用。
-
@Pascal Cuoq:我认为这个特定数字是否可以用 IEEE 754 表示并且 gcc 不会用其他一些任意数字发出警告。
-
@Pascal Cuoq,将其推向合乎逻辑的结论并展示荒谬的大道具。 :-)
标签: c gcc precision gcc-warning