勿在浮沙筑高台
几千行的规模的常规代码组合工程
1)为什么管理组织源文件
项目和程序太多了,很难放在一源文件中,这时候就需要分开, //三行注释一行代码,3:1(微软源文件风格)
将不同功能分别放在不同源文件中,有利于理解和维护。
将工程有序分为.c与.h (如章和节的概念),更容易找到自己感兴趣的代码。 //代码是给人看的,附带能在机器上能运行。
2)源文件组织的原则 //设计1:10 项目总和 能解决什么问题 就解决什么问题 时时刻刻都需要写从最简单的开始
同一类型和同意功能,用一个.c或者.cpp与一个.h(不能有可执行代码,不能有定义,)文件保存 //.h给别人用的.c是自己用。
头文件中不能有可执行代码,也不能有数据的定义,只能有宏、类型(typedef,struct,union,menu) ,数据和函数的声明。
头文件中不能包含本地数据(既模块自己使用的数据或函数)。只有模块自己使用的函数,数据,不要用extern在头文件里声明,
只有模块自己使用的宏,常量,类型也不要在头文件里声明,应该在自己的.c文件里声明。
防止被重复包含,使用宏“#pragma once” 防止一个头文件被重复包含
文件名为何实现模块的c文件相同,列入“abc.c”对应的头文件应该是“abc.h”
不要包含那些只能有本模块中才有使用的头文件,这些头文件应该在*.c文件中包含
接口文件(.h)
3)实例
保存执行绘图操作代码的文件:画
Draw.h //画图功能 输入输出功能在一起
Draw.c
保持游戏数据代码的文件:颜料
Data.h //相应的物品数据
Data.c
保存游戏主要逻辑判定的文件:画家
Engline.h //判断逻辑
Engine.c
多文件环境中如何定义/声明变量
源文件组织的基本建议
用于模块裁剪的 条件编译宏保存在一个独立的文件里,编译软件裁剪
硬件相关代码和操作系统的相关代码与纯c代码相对独立保持,以便于软件移植。
每个模块的文件包存在独立的一个文件夹中。
声明和定义分开.h文件暴露模块需要提供给外部的函数宏类型常量全局变量,尽量做到模块对外透明。第三方使用者在
使用模块功能是不需要俩就具体的实现,文件一旦发布,需要修改一定要很慎重。
文件夹和文军名要能够反映出模块的功能。
正式版本和测试版本使用统一文件,使用宏控制是否产生测试输出。
必要的注释不可缺少