12

在下面的示例中,如果取消注释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)
4

2 回答 2

8

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

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

于 2013-08-02T04:35:50.803 回答
0

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

于 2013-08-02T03:27:29.367 回答