c语言头文件和源文件为什么分开,C语言中为什么要头文件和源文件分开写

对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写。一般都是代表一个基本功能的源文件引用相应的头文件。

一个 相关功能的模块可能有若干对源文件和头文件组成。这是基于组件编程的核心。

在我看来,他的好处是巨大的,是java不可比拟的,也是不可复制的:

c语言中头文件中一般定义了函数的声明、结构体的定义、宏定义。(常量和全局变量最好放到源文件中)

1) 从业务扩展性上看:头文件中放函数的声明,函数由源文件实现,这就是将面向接口编程:接口和实现分开,这在面对业务变更频繁的需求中技术实现的好处是显而易见的--只要定义出良好地、扩展性高的接口,实现是可以很方便的更换。

2) 从程序架构上看:代码在在大型程序中 需要分成不同的模块,单一模块中又可能分为不同的业务功能单元,他们间有很多相互的调用。

头文件中的方法声明、结构体定义、宏就都可以充当这部分的模块与模块间、业务功能单位间的接口调用。模块与模块间,功能单元与功能单元间都是面向接口的调用,耦合性低,这正是基于组件编程的核心思想。

3) 从某些技术角度实现上看:头文件可通过宏定义来保证类定义、结构体定义、宏定义的唯一性。确实很方便,不容易出错。

在用makefile编译程序时,各个功能单元单独编译,构成中间文件.最终这些中间文件链接成可执行程序,在这些中间文件中重复引用同一头文件是不可避免的。但如果头文件有保护性编程就可以很容易保证类、结构体、宏定义的唯一性 ----最终链接成可执行程序时,可执行程序中代码区中只会有唯一的类、结构体、宏的定义,其他都因为不满足唯一性保护失效。这样的实现是不是很‘优雅’:)))? 我不知道你是否是这样认为,至于我,我是这样认为,haha~

在Linux内核,通常有许多头文件源文件需要编译成.ko(内核对象)文件,以实现对特定功能或驱动程序的支持。 首先,头文件包含了函数和数据结构的声明,被其他源文件引用。这些头文件通常以.h文件扩展名结尾。源文件则包含了函数和数据结构的实现,通常以.c或.cpp文件扩展名结尾。 为了将多个头文件源文件编译成.ko文件,使用Makefile是一个常见的方法。Makefile是一个文本文件,包含了一系列的规则,指定了文件的依赖关系以及编译和链接的命令。 Makefile的规则通常包括以下几个步骤: 1. 定义目标文件(.ko文件)的名称和相关的编译选项。 2. 定义依赖关系,即指定哪些源文件头文件需要进行编译。 3. 定义编译命令,通常使用gcc或其他编译器执行编译操作。例如,可以使用gcc -c命令将源文件编译成目标文件(.o文件)。 4. 定义链接命令,将所有目标文件链接成一个.ko文件。例如,可以使用gcc -o命令将所有目标文件链接成一个.ko文件。 在执行Makefile时,会根据规则的定义逐步执行编译和链接的操作,生成最终的.ko文件。同时,Makefile还可用于指定其他操作,例如清除间文件或执行其他自定义操作。 总而言之,将多个头文件源文件编译成.ko文件可以通过使用Makefile来定义编译和链接的规则,并将其作为输入参数传递给编译器。Makefile的规则会根据文件的依赖关系逐步执行编译和链接的操作,最终生成所需的.ko文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值