关于头文件的问题请教一下老师

关于头文件的问题请教一下老师

c/c++语言与其他编程语言再编写时倒入外部函数的方法好像都不太一样。

其他语言是通过导入函数具体的定义实现的文件。c语言是导入头文件,头文件中仅包含函数的声明。


1那么编译器是如何知道对应函数实现的源文件是哪一个呢?

2.像一些标准库文件,编译器可能是事先链接好具体的实现函数,但每编译一次就要去整个库函数中查找这样的效率会不会太低?   是不是比那些通过指定函数实现位置的来导入包 的语言效率低呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

问题1:

     在编译器会指定链接的库或者源文件编译之后的目标文件,关于函数在那个源文件中实现没有那么重要,因为最后都会变成一个可执行程序 ,会有一个统一的符号表,到时候按照偏移跳转即可

问题2:

      会链接整个库或者目标文件,不会单独查找某个函数,编译器会统一安排每个函数的位置,这个与程序的地址空间有关系

      

补充 : 在编译时 我们是需要指定需要链接的库,一般 默认 编译器会链接 glibc 库

  • 我想跑路 提问者 #1

    是不是可以这样理解,编译器对被链接库的函数都是了如指掌?都能在需要调用的时候直接跳转

    2022-10-12 14:28:50
  • 无__名 回复 提问者 我想跑路 #2

    编译器链接时就知道了函数库有哪些函数了,用的时候就跳转

    2022-10-12 14:52:29
  • 无__名 回复 提问者 我想跑路 #3

    你可以通过 nm 命令查看编译之后可执行文件的索引表与地址排列

    2022-10-12 14:54:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师