浮点常数比较 - (0.0?1:0)

时间:2013-08-02 03:09:25

标签: c windows visual-studio floating-point

在下面的示例中,如果取消注释float f = 0.0;,则  并将return(0.0 ? 1 : 0);替换为return(f ? 1 : 0); 输出为NIL

这是我的代码:

/* file main.c 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
cl -W4 -MTd -O2 -TC main.c -Fetest */   
#include <stdio.h>    
int my_func(void)
{
   /* float f = 0.0; */
   return(0.0 ? 1 : 0);
}
int main(void)
{  
    printf("%s\n", ( my_func() ? "ONE" : "NIL") );
    return 0;
}

在32位Windows计算机上,使用Visual Studio,此代码输出:

ONE
  • 为什么my_func()会返回值true(1)?
  • C编译器如何解释此表达式(0.0 ? 1 : 0)

2 个答案:

答案 0 :(得分:8)

这看起来像是Microsoft编译器中的一个错误,您应该将其提交给Connect。我能够在Visual Studio Express 2010中复制它,但不能在gcc中复制它:http://ideone.com/8qPRJd

任何计算结果为0的整数值的表达式都应该等同于false。这正是它与float变量一起使用的方式,当我尝试使用double时也是如此。

答案 1 :(得分:0)

返回(0.0?1:0)编译为固定返回1.在另一种情况下,实际评估浮点变量,0.0不等于0。