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、
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。