社区
C语言
帖子详情
函数引用时的一点疑惑
时间会戳穿你的谎言
2011-09-02 09:36:32
C中函数在头文件中声明,定义却在另外.c文件中,函数被引用时只声明了头文件,那么编译器是如何找到定义函数的.c文件呢?
...全文
94
7
打赏
收藏
函数引用时的一点疑惑
C中函数在头文件中声明,定义却在另外.c文件中,函数被引用时只声明了头文件,那么编译器是如何找到定义函数的.c文件呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
晨星
2011-09-02
打赏
举报
回复
[Quote=引用 6 楼 devil_2009 的回复:]
有点明白了,也就说在编译阶段,编译器会把所有的文件-头文件和.c文件都进行……
[/Quote]
嗯。差不多。
基本上,编译阶段是以.c文件为单位的,每次只编译一个.c文件。
只要到了连接阶段,所有的东西才串到一起。
时间会戳穿你的谎言
2011-09-02
打赏
举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
具体来说,编译器不必找到函数定义在哪儿,连接器能找到就可以了。
一般情况下,当连接产生最终的可执行文件时,连接器会在当前连接的目标文件和相关的库文件中查找符号定义,其中包括函数定义。
C语言的构建模式是典型的编译、连接彼此分离的模式。编译阶段不查找外部符号。
[/Quote]
有点明白了,也就说在编译阶段,编译器会把所有的文件-头文件和.c文件都进行编译。变量及函数虽然在不同的位置被声明和定义,但是编译生成的符号是唯一的。之后链接器就会根据符号及符号地址进行操作了。
AnYidan
2011-09-02
打赏
举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
具体来说,编译器不必找到函数定义在哪儿,连接器能找到就可以了。
一般情况下,当连接产生最终的可执行文件时,连接器会在当前连接的目标文件和相关的库文件中查找符号定义,其中包括函数定义。
C语言的构建模式是典型的编译、连接彼此分离的模式。编译阶段不查找外部符号。
[/Quote]
++
jackyjkchen
2011-09-02
打赏
举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
具体来说,编译器不必找到函数定义在哪儿,连接器能找到就可以了。
一般情况下,当连接产生最终的可执行文件时,连接器会在当前连接的目标文件和相关的库文件中查找符号定义,其中包括函数定义。
C语言的构建模式是典型的编译、连接彼此分离的模式。编译阶段不查找外部符号。
[/Quote]
++
连接器的活
Leaveye
2011-09-02
打赏
举报
回复
编译器 产生的目标文件只有符号及符号地址。
连接器 通过将所有需要的符号所在的目标文件融合进一体,也借此消除符号(非debug)建立跳转。
IDE 帮你做了配置这些的工作,其关系全都保存在工程文件中。
如果要手动做这些,你就需要学习编写 makefile 了。
limang89
2011-09-02
打赏
举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
具体来说,编译器不必找到函数定义在哪儿,连接器能找到就可以了。
一般情况下,当连接产生最终的可执行文件时,连接器会在当前连接的目标文件和相关的库文件中查找符号定义,其中包括函数定义。
C语言的构建模式是典型的编译、连接彼此分离的模式。编译阶段不查找外部符号。
[/Quote]
+1
晨星
2011-09-02
打赏
举报
回复
具体来说,编译器不必找到函数定义在哪儿,连接器能找到就可以了。
一般情况下,当连接产生最终的可执行文件时,连接器会在当前连接的目标文件和相关的库文件中查找符号定义,其中包括函数定义。
C语言的构建模式是典型的编译、连接彼此分离的模式。编译阶段不查找外部符号。
如何理解
引用
做
函数
返回值
时
,
函数
调用可以作为左值
最近在进行C++的学习,初次接触到C++中
引用
的概念。其中
函数
调用可以作为左值,虽然这个知识点不难理解,但也让我
疑惑
,为什么在之前对
函数
学习中,并没有接触到
函数
调用的这个做法....下面让我们一起看看。
C语言
函数
调用和变量、结构体、数组的传参问题
刚刚接触C语言的人可能会
函数
调用
时
传参感到
疑惑
:有的人会认为变量被传入了一个
函数
,那么在
函数
里对参数的修改将直接反映在变量本身上,即“把变量本身传给了
函数
”;有的人虽然能明白
函数
传参
时
传的不是变量本身...
什么是仿
函数
?
此外,如果成员
函数
是虚
函数
,则使用对象调用成员
函数
、使用指向对象的指针调用成员
函数
和使用指向对象的
引用
调用成员
函数
会动态绑定(即在运行
时
根据对象的实际类型来调用相应的虚
函数
),而使用类名调用成员
函数
...
error LNK2019: 无法解析的外部符号,该符号在
函数
_main 中被
引用
的解决方法
文章对“error LNK2019: 无法解析的外部符号,该符号在
函数
_main 中被
引用
”的原因进行分析,并提供了解决方法。
java
函数
参数对象
引用
无法传递参数_探讨Java中
函数
是值传递还是
引用
传递问题...
有说有值传递和
引用
传递两种,也有说只有值传递的,这里只说下个人见解先给大家介绍下概念值传递:(形式参数类型是基本数据类型):方法调用
时
,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章