我有此代码:
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
答案 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
应该声明为main
或int main(void)
。