没有math.h包含 - sqrt函数返回值?

时间:2014-12-14 14:29:41

标签: c

我有以下C代码:

#include <stdio.h>

main()
{
    double wurzelZwei;
    wurzelZwei = sqrt(2.0);
    printf("Wurzel 2: %lf\n", wurzelZwei);
}

为什么sqrt&#34; 1073742463&#34;的返回值&#34; math.h&#34;并且编译器/链接器仅显示警告并且没有致命错误。图书馆不包括在内?

1 个答案:

答案 0 :(得分:11)

在C89及更早版本中,允许调用尚未声明的函数。这样做时,假定该函数具有返回类型int。这称为隐式声明。

当你以某种方式调用一个函数,但它已经被一个非int类型的返回类型定义时,你会调用未定义的行为,就好像你已经使用与你定义的函数不同的返回类型显式声明了该函数。

所以在你的情况下会发生的事情是你使用默认的返回类型int隐式声明sqrt,所以你从sqrt得到的返回值被(错误地)解释为int,然后在你存储它时将int转换为double在wurzelZwei