关于C语言的一个问题,高手请进

比如说我有三个c文件,两个个h文件,main.c,a.c,a,h,b.c,b.h。a.c中有一个函数a();,为了给别的文件调用,在a.h中添加了externvoida(... 比如说我有三个c文件,两个个h文件,main.c,a.c,a,h,b.c,b.h。
a.c中有一个函数a();,为了给别的文件调用,在a.h中添加了extern void a();
b.c中有一个函数b();,为了给别的文件调用,在b.h中添加了extern void b();
现在是a();中调用b();所以在a.c 开头#include b.h;
main.c中main()想调用a();,在main.c开头#include a.h,还要#include b.h吗?
哥们,请确定自己是对的再回答好吗?四个答案2个说要2个说不要,好迷茫啊!
展开
 我来答
糗鳥
2014-05-04
知道答主
回答量:23
采纳率:0%
帮助的人:21.2万
展开全部

好吧,我来回答吧,其实是不需要的,我还特意测试了一下,编译成功而且调用过程都没有问题

解释一下,a.c文件中调用了b()函数,a.c包含了b.h头文件,所以a.c文件能正常调用b()函数,这点大家应该都没有问题,但main()中通过调用a()来间接调用b()函数需不需要b()的头文件呢,答案是不需要的,从编译过程中,我们知道,编译器把a.c、b.c和main.c分别编译成a.o、b.o和main.o的目标文件,然后分别将a.o和b.o和main.o链接成可执行程序。通过回顾编译过程,就非常好理解了,main.c中调用了a(),所以只要#include “a.h”告诉编译器a()函数是在别处定义的(这里是在a.c中定义)即可,至于在a()函数中调用了b()函数,只要在a()函数定义处添加#include "b.h"即可,与main.c文件是没有关系的。


用事实说话!

wuzongxian0010
2014-05-04 · TA获得超过796个赞
知道小有建树答主
回答量:433
采纳率:100%
帮助的人:334万
展开全部
如果b()没有在main.c中被直接调用,就不必包含b.h
不用迷茫,100%肯定不需要
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d3d9ee67b
2014-05-04 · 超过10用户采纳过TA的回答
知道答主
回答量:21
采纳率:0%
帮助的人:23.3万
展开全部
不好意思,看错了,以为你问的是关联包含。如果你a.h 包含 b.h,c.h 包含 a.h,那么c.h肯定是包含b.h中的函数的。但你用的都是*.c文件中包含其他的头文件,这个应该还是要加一句#include "b.h",头文件和源文件不建议你掺合写,如果你要想省事,你就在a.h中包含b.h,不要到a.c中去包含
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻形术
2014-05-04 · TA获得超过1262个赞
知道小有建树答主
回答量:994
采纳率:81%
帮助的人:264万
展开全部
要。
但如果你在a.h中写了#include "b.h",就不用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lovempeg
2014-05-04 · TA获得超过121个赞
知道小有建树答主
回答量:253
采纳率:0%
帮助的人:110万
展开全部
不需要,c语言函数都是全局函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
magry521
2014-05-04 · 超过14用户采纳过TA的回答
知道答主
回答量:33
采纳率:100%
帮助的人:32.9万
展开全部
要,因为你a.h中没有#include "b.h" 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式