请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

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

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

正在回答

1回答

编译器编译的时候,函数的声明只不过是告诉编译器有这么个函数而已,编译器看到声明也不会对声明做什么实质性的编译。

所以其实不存在定位到源码(c 或者 cpp 文件)的问题。

调用的时候,需要知道函数的地址,这个是链接阶段的工作,有链接器负责完成。静态链接是在整个链接过程中,直接将调用处的符号替换成对应的函数地址;动态链接是运行时加载,加载之后会计算符号的地址。

不过,C++ 编译慢确实有一部分的原因来自于头文件包含,现在也已经有了新特性在解决这个问题了。

0 回复 有任何疑惑可以回复我~
  • 提问者 我想跑路 #1
    明白了,谢谢老师
    回复 有任何疑惑可以回复我~ 2022-10-12 22:10:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信