关于.h文件和.cpp文件的问题,急!!!

anqingxuexi 2009-12-20 06:35:51
我在.h文件中声明一个函数,在.cpp文件中实现该函数。在主调函数中包含.h文件,那么在主调函数中就可以用该函数。我想问的是,主调函数中怎么根据.h文件找到.cpp文件,编译器具体是做了什么?谢谢!
...全文
138 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
haierpro 2009-12-21
  • 打赏
  • 举报
回复
.h文件只是告诉主调函数所在文件,被调用函数已经定义了,只是在别的文件定义的,这样编译器就让主调函数所在文件能编译通过。
而使主调函数真正能调用被调函数是在链接阶段,链接器会到其他所有的目标文件和库的函数表里查找被调函数,如果所有的目标文件和库都查完了,也没找到被调函数的定义,那么链接器才会认为被调函数未定义,然后就报错。
cir2633 2009-12-21
  • 打赏
  • 举报
回复
正常情况下,应该是先compile再link
liubuweiright 2009-12-21
  • 打赏
  • 举报
回复
学习。。。
anqingxuexi 2009-12-21
  • 打赏
  • 举报
回复
10楼正解,谢谢大家!
sallan 2009-12-20
  • 打赏
  • 举报
回复
mark
dskit 2009-12-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anqingxuexi 的回复:]
引用 2 楼 mstlq 的回复:
找函数入口?
那不是编译器做的事情,那是链接器做的事情


对的,是连接器的工作,那连接器是怎么工作的,它是根据.h文件中的函数名来找的吗?
[/Quote]

.cpp文件时单独的编译单元,编译完成后为.o/.obj, 然后再由link 确定函数的入口地址,所也说如果函数没有定义会在链接期报错。
anqingxuexi 2009-12-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
找函数入口?
那不是编译器做的事情,那是链接器做的事情
[/Quote]

对的,是连接器的工作,那连接器是怎么工作的,它是根据.h文件中的函数名来找的吗?
alwjuq 2009-12-20
  • 打赏
  • 举报
回复
学习了...
sduxiaoxiang 2009-12-20
  • 打赏
  • 举报
回复
link的事
hlyces 2009-12-20
  • 打赏
  • 举报
回复
1 、2 楼正解

学习
mstlq 2009-12-20
  • 打赏
  • 举报
回复
找函数入口?
那不是编译器做的事情,那是链接器做的事情
昵称很不好取 2009-12-20
  • 打赏
  • 举报
回复
如果你没实现该函数,就会提示链接错误,这话对楼主有用~~

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧