模块化编程设计题
一、简述模块化编程的必要?/p>
(
模块化的优点
)
参考答案:
大多数的编程学习者一开始接触和学习到的程序很小,代码量很少,甚至只有几十行?/p>
对于这样短小的程序进行模块化设计不是完全必要的。很多情况下程序模块化设计需?/p>
?/p>
?/p>
?/p>
?/p>
很多时间,例如增加了代码的数量,增加了构思的时间。把所有的程序代码都写在一?/p>
main()
函数中程序完全可以运行?/p>
但是随着学习的深入,代码量的增加,将所有的代码都放在同一?/p>
.C
文件中的做法越发
使得程序结构混乱,虽然可以运行,但是可读性、可移植性变差。即使是自己写的程序,时
间长以后对程序的阅读和修改也要花一些时间?/p>
模块化编程使得程序的组织结构更加富有?/p>
次感,立体感和降低程序的耦合度?/p>
在大规模程序开发中?/p>
一个程序由很多个模块组成,
很可能,
这些模块的编写任务被分配
到不同的人?/p>
几乎所有商用程序都必须使用模块化程序设计理念?/p>
在程序的设计过程中各?/p>
开发者分工合作,分别完成某一模块特定的功能,减少开发时间等?/p>
二、模块化编程设计步骤
(1)
、创建头文件
在模块化编程中,往往会有多个
C
文件,而且每个
C
文件的作用不尽相同。在我们?/p>
C
文件中,
由于需要对外提供接口,
因此还必须有一些函数或者是变量提供给外部其它文?/p>
进行调用?/p>
对于每一个模块都有相应的
.c
文件?/p>
.h
文件?/p>
为了阅读调试方便,原则上
.c
文件
?/p>
.h
文件同名,如
delay.c
?/p>
delay.h
?/p>
(2)
防重复包?/p>
例如
delay.h
文件
#ifndef__DELAY_H__
#define__DELAY_H__
void delay
?/p>
uint t
?/p>
?/p>
#endif
假如有两个不同源文件需要调?/p>
delay
?/p>
uint
t
)这个函数,他们分别都通过
#include
?/p>
delay.h
?/p>
把这个头文件包含了进去?/p>
在第一个源文件进行编译时候,
由于没有定义?/p>
delay.h
_
因此
#ifndef__DELAY_H__
条件成立,于是定?/p>
_DELAY_H_
并将下面的声明包含进去。在
第二个文件编译时候,由于第一个文件包含时候,已经?/p>
_DELAY_H_
定义过了。因?/p>
#ifndef__DELAY_H__
不成立,整个头文件内容就没有被包含。假设没有这样的条件编译?/p>
句,那么两个文件都包含了
delay
?/p>
uint t
?/p>
?/p>
就会引起重复包含的错误。所以在
.h
文件中,
为了防止出现错误都进行防重复包含?/p>
?/p>
3
)代码封?/p>
将需要模块化的进行代码封?/p>
头文件的作用可以称其为一份接口描述文件?/p>
其文件内部不应该包含任何实质性的函数
代码?/p>
我们可以把这个头文件理解成为一份说明书?/p>
说明的内容就是我们的模块对外提供?/p>
接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信
息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:
不该让外界知道的信息就不应该出现在头文件里(不需要外部调用的函数不在头文件中?/p>
明)
?/p>
而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件?/p>
(需
要被外部调用的函数一定要在头文件中申明)
,否则,外界就无法正确的调用我们提供的接
口功能?/p>