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

标签 c

我有以下 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/

相关文章:

c - C语言的字数统计程序没有输出

c - Xcode 导航栏按钮崩溃

c - sizeof argv[1] 不工作

c - 读取 SQLite header

c - n 个数字可能的三角形总数

c++ - 在 DWARF 信息中,DW_OP 寄存器的确切含义是什么?

c - 使用 scanf 时跳过最后一个输入

c - 我在下面的代码中被中止(核心转储)

c - typeof的返回类型是什么?

c - 如何用C语言打开任意长度的文件?