有没有办法让
这个问题的灵感来自我最近观察到的一个 bug,其中括号位置错了,
这将产生如下结果:
gcc
或 g++
在 if
语句中发生隐式转换时(比如: if(25.0)
) 发出警告?这个问题的灵感来自我最近观察到的一个 bug,其中括号位置错了,
if
语句的行为与下面的示例所示的预期行为不同。从逗号运算符的这次讨论中我明白这是有效的(虽然丑陋),但我想得到一个警告。
我尝试了使用 g++ (GCC) 4.1.2
和 g++ (GCC) 4.6.3
的选项 -Wconversion -Wall -pedantic
,但都没有成功。#include <cstdio>
bool passMin(float val, float minval=10.) {return minval<val;}
int main () {
float val(20.0), minval(25.0);
if(passMin(val), minval) printf(" pass (p( ), )"); else printf(" fail (p( ), )");
printf("\n");
if(passMin(val, minval)) printf(" pass (p( , ))"); else printf(" fail (p( , ))");
printf("\n");
}
这将产生如下结果:
pass (p( ), )
fail (p( , ))
if
语句... - Basile Starynkevitchclang
,它会为此提供一个不错的警告,可以在此链接中查看。因此,如果可以使用clang
,那么您可能很幸运。 - Shafik Yaghmourclang
,但它看起来非常有前途。谢谢! - user2148414-Wfloat-equal
可以覆盖它。该警告是关于精确比较的,其中一个操作数是浮点类型。在if
语句中使用浮点值执行与零的精确比较。 - user743382