gpt4 book ai didi

c - c中同一个函数的两个声明

转载 作者:太空狗 更新时间:2023-10-29 17:16:46 25 4
gpt4 key购买 nike

我在测试中遇到了这个问题,但我仍然不明白给出的答案:

假设我编写了以下代码:

#include <math.h>
#include <stdio.h>

float cos(float x){
return 1-x*x/4;
}

int main()
{
printf("%0f",cos(0.05f)+sin(0.05f));
}

假设 cossin 在数学库中声明和定义(接收和返回 double),我正在尝试将我的代码与数学库链接起来。

另一个假设是 cos 是在 math.c 中定义的。

问题是:

"Will the code compile/link successfully? if so, which cos function will be called?"

答案是:

"Yes, the code will compile and my cos will be called".

如何解释这种行为?这些不是同一个函数的多个定义吗?

最佳答案

你的老师可能犯了一个错误,打算使用double cos(double x)。在这种情况下,许多 C 实现将接受该程序,并且它将链接并运行,因为链接器从它提供的目标模块中获取每个模块,但只获取需要的它提供的库中的模块。因此,因为 cos 已经在程序中定义,链接器不会从数学库中获取它。然而,尽管这在许多 C 实现中有效,但它违反了保留库标识符的标准 C 的规则;普通程序可能不会定义它们。

另一种可能是您的老师不打算包含 math.h。这将使 cos 的声明不是错误,因为它不会与另一个声明冲突,但这意味着 sin 也应该由程序声明,因为它被使用了。

关于c - c中同一个函数的两个声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com