在C中定义两次函数
发布时间:2020-12-16 06:45:30 所属栏目:百科 来源:网络整理
导读:我有个问题.我写了这段代码,a.h. a.c和main.c: 文件:a.h #ifndef _a_H#define _a_Hint poly (int a,int b,int c,int x);int square (int x){ return x*x;}#endif // _a_H 文件:a.c #include "a.h"int poly (int a,int x){ return a*square(x) + b * x +c;
我有个问题.我写了这段代码,a.h. a.c和main.c:
文件:a.h #ifndef _a_H #define _a_H int poly (int a,int b,int c,int x); int square (int x) { return x*x; } #endif // _a_H 文件:a.c #include "a.h" int poly (int a,int x) { return a*square(x) + b * x +c; } file:main.c #include <stdio.h> #include "a.h" int main() { int p1 = poly1 (1,2,1,5); int p2 = poly2 (1,3,5); printf ("p1 = %d,p2 = %dn",p1,p2); return 0; } 我收到一个错误:
所以我将函数square的实现移动到a.c文件,它的工作原理. 有人知道为什么吗? 感谢名单 解决方法
一般来说,* .c文件被编译成* .o文件,* .o文件被链接以构建可执行文件. * .h文件未编译,它们以文本形式包含在* .c文件中,它们是#included.
因此,通过#including“a.h”两次,在两个单独的* .c文件中,您已将square()的定义放入两个单独的文件中.编译完成后,最终会得到两个square()副本,每个* .o文件中有一个副本.然后,当您链接它们时,链接器会看到这两个文件,并生成错误. 怎么避免这个?你已经发现了这个.不要将函数定义放在* .h文件中.将它们放在* .c文件中,只将函数声明放在* .h文件中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |