background image

C

 

语言嵌入式系统编程修炼之软件架构篇 - -

%o.`$T-^+F't—— 全球最大的中文电子开发论坛模块划分
t&v%D0y'\(^6a8t&[电子论坛,电子设计论坛,电子开发论坛
8]"o&Z1f2^&]/s9{-g8l 电子论坛,电子设计论坛,电子开发论坛  模块划分的"划"是规划的
意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的
需求。C 语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进
行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C 语言模块化程序
设计需理解如下概念:
'u2|*[:S1C6E-J%O3X
!b"B _3J1a&n3V 电子开发论坛  (1

 

) 模块即是一个.c 文件和一个.h 文件的结合,头文

件(.h)中是对于该模块接口的声明;

电子论坛,电子设计论坛,电子开发论

坛/y9M)m:B8g#};h+C+K-h

(2  

) 某模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以 extern 关键字声

明;

电子论坛,电子设计论坛,电子开发论坛(i1o*g3@4w3K1b3y6s0g6l&C

3Y7{,p6D2P)^www.dzkf.net  (3

 

) 模块内的函数和全局变量需在.c 文件开头冠以 static

关键字声明;
2{.U%A9k!t#j%K.p:v—— 全球最大的中文电子开发论坛

www.dzkf.net4i&[!U9]#G!j)}

  (4  

) 永远不要在.h 文件中定义变量!定义变量和声明变量的区别在于定义会产生

内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段
从其它模块寻找外部函数和变量。如:
-F'{3};G1f(swww.dzkf.net
)B"P6q&h"A&[电子论坛,电子设计论坛,电子开发论坛

www.dzkf.net4r'f)m2~1T(u.x*p"d'D

,_#G;{!c-l7f)M5t

/*module1.h*/
4U'X%i6_&q!x.N#r"S3b 电子论坛,电子设计论坛,电子开发论坛 int a = 5; /* 在模块 1 的.h 文
件中定义 int a */
!B0B&^3Q7x;A$]电子论坛,电子设计论坛,电子开发论坛

电子论坛,电子设计论坛,电子开发

论坛 2g0b)|'b:E"K+[/_

/*module1 .c*/

)u0U8H;a9D5a)o$r!z$f3g:J

#include "module1.h" /* 在模块 1 中包含模块 1 的.h

 

文件 */

)C6j*A$N#J3_/C$l:y Owww.dzkf.net
)B;z!f#`6vwww.dzkf.net/*module2 .c*/

;`6w9a$|0X

#include "module1.h" /* 在模块 2 中包含模块 1 的.h

 

文件 */

电子开发论坛"g!c%d!\'J(O

电子开发论坛"_0S$}$H7o#z2M6c&`

/*module3 .c*/
2N,r5V,r.B3f n3D#include "module1.h" /* 在模块 3 中包含模块 1 的.h

 

文件 */ 

www.dzkf.net&C$I;t/X#e&P:X4G