gpt4 book ai didi

c - 主文件调用另一个文件中的函数,然后返回

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:09 25 4
gpt4 key购买 nike

获取“sqrtof2”错误的多重定义。我试图让一个 C 程序从另一个 C 程序中获得 2 的平方根。然后使用 makefile 将它们组合在一起。迷路了

   #include <stdio.h>
#include <math.h>
#include "make2.c"


int main(void) {

double num =2.0;
// calls the sqrt function make2.c

sqrtof2(num);

printf("The sqaure root: %f", num);


return(0);
}


2nd program: make2.c


#include <stdio.h>

#include <math.h>

sqrtof2 (double num4) {
double num5 = 0;
num5= sqrt(num4);

return num5;

}


makeupfile: make3.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED


void sqrtof2(void);

#endif

最佳答案

你不需要做 "#include <math.h>""#include <stdio.h>"在您的 make2.c 文件中,因为它们已经包含在您的主文件中,并且您的主文件包含 make2.c 文件。这应该消除您的错误,尽管我们必须查看您的 Makefile 的确切内容才能正确诊断可能发生的情况。至少,您应该有关于隐式声明的额外警告。

更新:您执行此程序的方式不是最好的。您应该使用头文件来指定包含在单独文件中的函数的原型(prototype),然后在主程序中将各个目标文件链接在一起。

更新 2:有人要求我实际编译您的文件,所以我将您的第一个程序放入 make1.c和你的第二个程序到make2.c .不需要 Makefile,我可以简单地输入 make make1我得到了一个工作程序 make1没有编译错误……但当然会产生错误的答案(2 而不是 1.4……)。

正如其他答案之一所指出的,该程序的错误不仅仅是多个声明。您没有使用从 sqrtof2 返回的值完全发挥作用。

如果要计算num的平方根将结果存储回num就像你想做的那样,那么你需要说 num = sqrtof2(num);

当然,这仍然会产生错误的答案。

原因是您的函数被隐式设置为返回一个整数值。您需要放置 double在函数声明之前,即 double sqrtof2 (double num4)

但是当你输入 make make1再一次,那么什么都不会发生。您开始发现包含 .c 的问题另一个 C 文件中的文件。 make程序无法检测到make1.c的源代码依赖于make2.c的更新内容,你必须输入touch make1.c。 (或编辑 make1.c)然后键入 make make1再次生成 make1 的工作可执行版本,它会生成您想要的答案 1.414214...

因此,请遵循其他一些关于如何构建程序的优秀建议。 :)

关于c - 主文件调用另一个文件中的函数,然后返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17356093/

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