【问题标题】:Why assignment of double to int does not trigger gcc warnings?为什么将 double 分配给 int 不会触发 gcc 警告?
【发布时间】: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


【解决方案1】:

-Wconversion 警告隐式转换。

【讨论】:

  • mingw 是否识别此选项,请使用 gcc -v 选项检查以获取更多详细信息。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2021-12-11
相关资源
最近更新 更多