gcc - 对于除字面零之外的所有比较,我能否获得 -Wfloat-equal 的行为?

标签 gcc compiler-warnings

我想在我的构建选项中启用 -Wfloat-equal (这是一个 GCC 标志,当通过 == 或 != 运算符比较两个浮点数时会发出警告)。但是,在我使用的几个库的头文件中,以及我自己代码的很大一部分中,我经常想使用 if (x) 为浮点数或 double 数的非零值进行分支。或 if (x != 0)或它的变体。

由于在这些情况下,我绝对确定该值恰好为零 - 检查的值是显式零初始化的结果,calloc等 - 我看不出使用这种比较的缺点,而不是对我的 near(x, 0) 的调用相当昂贵且可读性较差。功能。

有什么办法可以得到-Wfloat-equal的效果吗?对于所有其他类型的浮点相等比较,但允许这些不加标记地通过?在库头文件中有足够多的实例,它们会严重污染我的警告输出。

最佳答案

从您提出的问题来看,警告似乎是完全合适的。如果您要与精确零进行比较以测试数据是否仍然具有来自 calloc 的初始零值(从纯 C 的角度来看,这实际上是不正确的,但适用于任何符合 IEEE 754 的实现),您可能会从四舍五入为零的非零值中得到误报。换句话说,听起来您的代码不正确。

关于gcc - 对于除字面零之外的所有比较,我能否获得 -Wfloat-equal 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123651/

相关文章:

c++ - 未初始化的本地字符的行为?

不使用 libc 编译

java未经检查的转换

ios - 调用的 Swift 结果未使用

c++ - GCC 和 Clang 是否优化逐字段结构复制?

c - GCC:编译不同文件夹中的文件

linux - 如何打印 ld(linker) 搜索路径

c++ - 将 Google 的协议(protocol) Buffer 添加到 Qt ;禁用编译器警告

c++ - 为什么要按照声明的顺序初始化成员变量?

objective-c - 发现多个名为 "count"的方法具有不匹配的结果、参数类型或属性