我有以下 C 代码:
#include <stdio.h>
main()
{
double wurzelZwei;
wurzelZwei = sqrt(2.0);
printf("Wurzel 2: %lf\n", wurzelZwei);
}
为什么 sqrt 的返回值是“1073742463”并且编译器/链接器在不包含“math.h”库时只显示警告而没有出现 fatal error ?
最佳答案
在 C89 及更早版本中,允许调用未声明的函数。这样做时,假定该函数具有返回类型 int。这称为隐式声明。
当您以这种方式调用一个函数,但它已被定义为非 int 返回类型时,您调用未定义的行为就像您已明确声明该函数具有与您定义它不同的返回类型一样。
因此,在您的情况下,您隐式声明了默认返回类型 int 的 sqrt,因此您从 sqrt 获得的返回值被(错误地)解释为 int,然后在存储时将该 int 转换为 double在 wurzelZwei
中。
关于c - 没有 math.h 包含 - sqrt 函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470316/