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

Max*_*ter 1 c

我有以下C代码:

#include <stdio.h>

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

为什么sqrt"1073742463"的返回值和编译器/链接器仅在不包含"math.h"库时才显示警告且没有致命错误?

sep*_*p2k 11

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

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

因此,在您的情况下,您会使用默认返回类型int隐式声明sqrt,因此从sqrt获取的返回值(错误地)被解释为int,然后在存储时将int转换为double wurzelZwei.