其实也没有啥背景。 最主要的原因就像 《30天自制操作系统》一书作者说的那样,写一个操作系统,仅仅想想就是一件特别有趣的事情呢。一两年前曾经入手开始写过,但慢慢的就不了了之了。现在又有这个想法了,准备一直干下去,最终写一个操作系统出来,算是程序员生涯的一份礼物。
其次的原因,是因为我也认为未来初级程序员的岗位会越来越少,借助 LLM 人人都是初级程序员可能会变成现实。这个时候专业性和底层就会越来越重要。
《30天自制操作系统》进入到了第六天,开始对C的代码进行重构。重构的过程中遇到了两种类型的文件 .h
和 .c
接下来会重点介绍一下这两种文件
.h
vs .c
在C语言中,.h
(Header)文件和.c
(Source)文件是两种不同的文件类型,它们在编译和链接过程中扮演不同的角色。
.h
文件(Header 文件): .h
文件通常包含函数声明、宏定义、类型定义和包含其他.h
文件的指令。.c
文件中使用的符号和结构。.h
文件可以被多个.c
文件包含,以避免重复定义和声明。.h
结尾。.c
文件(Source 文件): .c
文件包含实际的函数实现、变量声明和代码逻辑。.c
文件可以包含一个或多个函数的实现,以及相关的变量和数据结构。.c
结尾。
在编译过程中,.c
文件会被编译成目标文件(.o
文件),而.h
文件则不会被编译。在链接过程中,.o
文件会被链接器合并,生成可执行文件或库文件。.h
文件在链接过程中不参与,因为它们只包含声明,而不是实现。
总结来说,.h
文件用于定义和声明,而.c
文件用于实现和编写代码。两者共同工作,以确保代码的可重用性和模块化。.h
文件的好处另外也可以在不使用.h
文件的情况下达到相同的效果,但是使用.h
文件通常可以提高代码的清晰度、可维护性和重用性。以下是使用.h
文件的一些好处:
.h
文件可以包含多个.c
文件中使用的公共声明,如函数原型、宏定义和类型定义。这有助于将代码组织成模块,每个模块负责不同的功能。.h
文件中定义和声明,可以避免在多个.c
文件中重复编写相同的声明。.h
文件中进行一次更改,所有包含该.h
文件的.c
文件都会自动更新。.h
文件可以帮助开发者快速了解哪些声明和函数可以在项目中使用,而不需要阅读所有.c
文件。.h
文件可以包含依赖关系,这有助于确保编译器知道哪些.c
文件需要被编译以支持特定的声明。.c
文件时会检查其依赖关系。如果一个.c
文件包含一个.h
文件,编译器不需要再次编译.h
文件,这可以加快编译速度。.h
文件可以包含平台特定的宏定义,这有助于在不同的操作系统上编译和运行代码。
尽管可以使用全局.c
文件来代替.h
文件,但是这种做法通常会导致代码混乱,难以维护,并且编译时间可能会增加。因此,除非有特殊原因,推荐使用.h
文件来组织和维护C语言项目。.h
这种实现方式目前没有明确的答案,C 的发明者也没有明确说,以下仅为猜测
C 语言的设计者 Dennis Ritchie 选择使用 .h
文件作为头文件的主要原因如下:
.h
是一个常见的文件扩展名,用于表示头文件。总之,Ritchie 选择使用 .h
文件作为头文件,是基于当时 C 语言的编译器技术、模块化设计需求、语言特性以及可移植性等因素。这种设计方式虽然在今天看来可能有些过时,但在 C 语言诞生的年代,它确实是一个合理的选择。
文章围绕作者写操作系统初衷展开,着重讲解 C 语言里.h与.c文件差异、协同工作方式,凸显.h文件对提升代码质量的意义,剖析其设计成因,体现其在 C 语言编程体系里的重要与合理性。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有