我有以下代码:
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
中的值也可能很大,否则程序可能崩溃了。
另外,发布的代码无法编译,并且存在许多问题:typedef
的MyTime
定义必须以分号结尾。
该代码应包含#include <stdio.h>
来声明print
。main
应该声明为int main(void)
或int main(int argc, char *argv[])
。
关于c - C-零双变量不匹配条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53347876/