如果我定义一个main.c;fun.c;fun.h;在main.c里调用fun.c里面的函数,并在fun.c里面声明fun.c的函数,在main.c里#include"fun.h",在编译过程中,找到调用函数,并在fun.h中找到了函数的声明。那是怎么根据.h里的函数声明找到对应的函数在哪个.c文件里的呢,
3条回答 默认 最新
- GISer Liu 2024-02-28 00:26关注
该回答引用自GPT-3.5,由博主GISer Liu编写:
要解决这个问题,首先需要理解编译器是如何在编译过程中将函数的声明与定义联系起来的。在编译过程中,编译器会按照以下步骤进行:
- 当在
main.c
中调用函数时,编译器会查找该函数的声明。这个声明通常位于对应的头文件.h
中。 - 在
main.c
中使用了#include "fun.h"
指令,这意味着编译器会将fun.h
的内容包含到main.c
中进行编译。 - 在
fun.h
中,函数的声明告诉编译器有一个函数存在,但没有具体的实现。这就是所谓的函数原型或函数声明。 - 编译器在编译过程中并不关心函数的具体实现在哪个
.c
文件中,它只需要找到对应的函数声明。 - 在链接阶段,编译器会将所有
.c
文件中的函数实现链接起来,生成最终的可执行文件。在这个阶段,编译器会查找所有被调用的函数的实现,并将它们合并到可执行文件中。
因此,对于编译器来说,只需要在编译过程中找到函数的声明即可,具体的函数实现会在链接阶段解决。
解决方案: - 在
fun.h
中声明函数的原型,例如:void fun();
,这是函数的声明。 - 在
fun.c
中实现函数,例如:void fun() { // 函数实现 }
。 - 在
main.c
中调用函数fun()
,并在文件开头包含#include "fun.h"
。
这样,编译器在编译main.c
时会找到函数fun()
的声明,而具体的实现会在链接阶段解决,无需显式指定函数的实现文件。
如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订
解决 无用评论 打赏 举报 - 当在
悬赏问题
- ¥200 csgo2的viewmatrix值是否还有别的获取方式
- ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 pycharm运行main文件,显示没有conda环境
- ¥15 易优eyoucms关于二级栏目调用的问题
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题