gpt4 book ai didi

c - 头文件中的函数如何链接到 .c 文件?

转载 作者:行者123 更新时间:2023-12-03 23:46:35 24 4
gpt4 key购买 nike

cs50 的问题集 4 中,有一个主函数filter.c ,它使用头文件helper.h .后者包含了几个函数的原型(prototype),这些完整的函数写在helper.c
我的问题是:自从 filter.c只连接到 helper.h ,它如何连接到函数的代码?或者 filter.c 是否也会自动查找与链接头文件同名的 .c 文件?

我希望这有点清楚!

最佳答案

一个C的汇编该计划涉及以下简要列出的三个基本步骤:
预处理:
预处理器采用 C源代码文件并处理#includes , #defines和其他预处理器directives .还清理所有注释并展开这些文件中的所有宏。 (它对 c 和 h 文件都执行)此步骤的输出是 "pure" C没有预处理器指令的文件。
汇编:
编译器获取预处理器的输出并从中生成一个目标文件。用适合您的代码将在其上运行的 cpu 的程序集编写。
链接:
链接器获取编译器生成的目标文件并生成库或可执行文件。其中包含由操作系统直接运行的所有信息和进程术语(.out 或 .elf 是链接器输出的示例)。
你的情况
filter.c或在每个 .c文件(包括 helper.c ),您在其中 #includes "helper.h" ,此步骤以 helper.h 中声明的所有函数签名结束复制进度 filter.c ( 仅签名 )。现在这发生在 preprocessor time .现在在 main.c你在哪里(我想)#includes "filter.h" , 预处理器将复制所有 嵌套 .h文件(告诉到达链中最后一个 .h 文件)到 main.c (在我们的例子中,它唯一的 filter.h 包含 helper.h )。当compiler来编译.c文件,他编译 helper.c , 'filter.cmain.c并在最后生成目标文件(.o.obj - 适用于当前 cpu 的二进制文件)他触发链接器链接所有这些 objects一起成为并完全可执行(链接器还链接来自预定义库的所有函数,例如 printf )

                 preprocessor                    compiler                 linker
------------ -------- --------
+------------+ copy helper.h to +----------+
+ helper.h +------------------> + filter.c + -------> filter.o + +--------+
+------------+ | +----------+ | + +
| | + .elf +
| +---> + +
+---------> +-----------+ + or +
+ helper.c + ------> helper.o ----> + .out +
+-----------+ +---> +--------+
| ^
+-------------+ | |
+ filter.h +---------> +-------------+ | |
+-------------+ + main.c + -----> main.o---+ |
+-------------+ |
|
+-------------------+
+ libs (e.g. stdio) +
+-------------------+

关于c - 头文件中的函数如何链接到 .c 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62357980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com