C-零双变量不匹配条件

时间:2018-11-17 03:19:35

标签: c double

我有此代码:

typedef struct{
    double tmp;
} MyTime

void foo(double time){
    printf("A: %f\n", time);
    if(time==0)
       printf("B\n");
}

void main(){
    MyTime mytime;
    foo(mytime.tmp);
}

程序的输出仅为“ A:0.000000”。为什么它还不打印“ B”?

我听不懂...

thnx

1 个答案:

答案 0 :(得分:0)

您显示的代码无法初始化mytime。在C语言中,没有static的函数内部定义的对象默认情况下不会初始化为零(或任何其他值)。它的值不确定,使用它通常会导致不确定的行为。

在这种情况下,代码的行为就像mytime.tmp具有较小的非零值,例如1e-9。用%f格式化时,小值格式化为“ 0.000000”。并且,由于该值不为零,因此time==0返回false。 (将%f更改为%g可能会显示一个很小的非零值。)

由于代码无法初始化mytime,因此mytime.tmp中的值也可能很大,否则程序可能崩溃了。

此外,发布的代码无法编译,并且存在许多问题:

  • typedef的{​​{1}}定义必须以分号结尾。
  • 代码应包含MyTime来声明#include <stdio.h>
  • print应该声明为mainint main(void)