我有以下代码:

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”?

我听不懂

n

最佳答案

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

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

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

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


typedefMyTime定义必须以分号结尾。
该代码应包含#include <stdio.h>来声明print
main应该声明为int main(void)int main(int argc, char *argv[])

关于c - C-零双变量不匹配条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53347876/

10-09 19:36