1、#include

1.1 .c文件可以被include吗

问:#include能不能include一个(多个).c文件?
答:从理论上讲可以,但是不推荐。

(1)include语法:内容替换
从语法角度讲,include的意思就是从当前位置包含另外一个文件,就像宏替换一样把当前行用另外一个文件的整个内容替换掉
从这点讲,include .c文件是可行的,c编译器完全能够正常处理。

(2)但是为什么不常见include .c文件?
从设计角度上讲,源代码区分为.h和.c文件,是为了接口与实现分离,实际上两者没什么本质的差别。
.h文件提供接口,.c文件提供具体的实现,两者可以一一对应,也可以不一一对应,没有强制要求。
一个.c文件作为一个模块的实现,有可能要跟其他的模块打交道,这个时候就需要include其他模块的接口(其他模块的.h文件);而包含其他模块的实现(.c文件)是没有意义的、危险的

(3)区分为头文件和源文件的目的
接口与实现分离,传递接口中不产生任何实际代码的信息:
类型定义
外部函数原型
外部变量

(4)c各文件之间的代码是通过#include来引入的吗?这属于连接器的工作!

1.2 GNU make滥用include的案例

具体看:https://www.cnblogs.com/jeakon/archive/2012/05/06/2816836.html

c各文件之间的代码是通过#include来引入的吗?这属于连接器的工作!

怀疑使用这个的人,也许是因为源文件的代码太长了,就滥用#include,将源代码分到几个文件上。

我估计将实现这种招数的办法是将源代码划分为一个主多个从的关系,主的引入所有从文件。

他们的内容有如下规定:
主文件,包括所有外部连接的代码(公共)
从文件,所有元素具备内部连接(私有)
对于客户端来说,只有主文件才是他们真正去要连接的。
而因为从文件都是内部连接,相关的.obj将毫无疑义的被丢弃,因为主文件有着一模一样的拷贝。

当然更蹩脚的办法是将这些#include了的源文件排除出项目定义文件。

2、

posted on 2022-02-23 11:34  西伯尔  阅读(80)  评论(0编辑  收藏  举报