深入学习C语言必备之封装和模块化思想

Posted 嵌入式ARM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入学习C语言必备之封装和模块化思想相关的知识,希望对你有一定的参考价值。

刚学习完C后,做的关于C的课程设计是在一个源文件中放了几百行代码,而且各个功能之间都是相互依赖的,这样就会很麻烦。因为当要修改某个地方的时候,就会牵连着要修改喝多的地方。而在实际的程序设计中,这也是不可取的。因此,模块化和封装的思想就显得很重要了!!!


static变量

static变量的一个显著的作用就是可以实现一个模块的封装。


static存储类别的特性决定了static声明的全局变量只能被本源文件的函数引用。当在一个源文件中定义一个static全局变量后,其他文件就不能通过使用“extern”关键词来引用该全局变量,而只能通过该源文件提供的接口函数来访问这个全局变量。


深入学习C语言必备之封装和模块化思想

实例

如下写了一个简单的实现杨辉三角的程序。其中,定义了一个静态全局变量数组a[100][100],然后后面的函数就是对该数组的一些操作。而该源文件之外的函数就只能够通过调用这些函数来完成对数组的操作。


Pascal_triangle.c

1. #include <stdio.h>  

2.   

3. static int a[100][100];  

4.   

5. void Pascal_triangle(int num)  

6. {  

7.     int i,j;  

8.   

9.     for(i = 1; i <= num; i ++)  

10.     {  

11.         a[i][0] = 1;  

12.         a[i][i-1] = 1;  

13.     }  

14.   

15.     for(i = 2;i < num; i ++)  

16.     {  

17.         for(j = 0; j < i -1; j ++)  

18.         {  

19.             a[i + 1][j + 1] = a[i][j] + a[i][j + 1];  

20.         }  

21.     }  

22.   

23.     for(i = 1; i <= num;i ++)  

24.     {  

25.         for(j = 0; j < num; j ++)  

26.         {  

27.             printf("%d ",a[i][j]);  

28.             if(i == (j + 1))  

29.             {  

30.                 printf("\n");  

31.                 break;  

32.             }  

33.         }  

34.     }  

35. }  

Pascal_triangle.h

1. #ifndef PASCAL_TRIANGLE_H_INCLUDED  

2. #define PASCAL_TRIANGLE_H_INCLUDED  

3.   

4. extern void Pascal_triangle(int num);  

5.   

6. #endif // PASCAL_TRIANGLE_H_INCLUDED  


main.c

1. #include <stdio.h>  

2. #include "Pascal_triangle.h"  

3.   

4. int main(void)  

5. {  

6.     int num;  

7.     printf("请输入数据:\n");  

8.     scanf("%d",&num);  

9.     Pascal_triangle(num);  

10.     return 0;  

11. }  

这样做就实现了杨辉三角的实现程序对外界的封住,一个工程中的其他源文件里的函数不用了解杨辉三角函数里面的具体操作是如何进行的,只需要使用模块中提供的接口函数就可以了。这样杨辉三角的实现模块就完全的独立于其他的模块了。如图所示:

深入学习C语言必备之封装和模块化思想

Pascal_triangle.h头文件就是向外界提供一个实现杨辉三角的接口函数的声明,这一点是很重要的。


当这样处理好一个源文件之后,不管怎样操作修改杨辉三角的实现函数,对其他的代码没有任何影响。但是有一点要注意:不要修改函数接口本身,因为一旦修改,其他代码就可能会有大的改动

深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


关注嵌入式ARM

深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


关注21ic官方微信

深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


关注 电源Fan

深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


深入学习C语言必备之封装和模块化思想
深入学习C语言必备之封装和模块化思想


关注德州仪器公开课 


深入学习C语言必备之封装和模块化思想


以上是关于深入学习C语言必备之封装和模块化思想的主要内容,如果未能解决你的问题,请参考以下文章

学习嵌入式C语言,模块化和封装的思想很重要!

课程设计必备之数据库操作代码模板

C语言之以函数指针结构体方式实现面向对象的思想

学习C#编程经典书籍

如何高效学习C++?

C语言学习笔记--函数