0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于static变量来实现一个模块的封装

5RJg_mcuworld 2018-01-05 10:54 次阅读

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

static变量

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

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

实例

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

Pascal_triangle.c

[cpp] view plain copy

1. #include

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

[cpp] view plain copy

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

[cpp] view plain copy

1. #include

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. }

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

基于static变量来实现一个模块的封装

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    126

    文章

    7881

    浏览量

    142902
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136710
  • static
    +关注

    关注

    0

    文章

    33

    浏览量

    10366

原文标题:C语言学习|封装和模块化思想

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    强大的matlab:在类中实现static成员变量 (转帖)

    不需要使用MATLAB的类定义了。可是如果应用MATLAB开发具有工程应用型的程序,使用面向对象编程会具有不可比拟的优势。懂C++的朋友应该都知道,C++有static成员,static
    发表于 03-07 10:42

    static 修饰的变量在函数中赋值问题

    ,即将退出函数(在下面1处)step 的值莫名其妙的变回2,step变量只有这个地方使用,这个是什么问题???大神们帮忙分析下什么问题!!!!!如下程序:void display(){static
    发表于 12-15 09:10

    static的全局变量与局部变量的使用,看完你就懂了

    时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了问题: 如果想将函数中此变量的值保存至下次调用时,如何
    发表于 06-27 08:54

    static作用(修饰函数、局部变量、全局变量

    详细介绍了static作用(修饰函数、局部变量、全局变量)的用法
    发表于 11-17 10:30 4次下载

    C语言static作用

      在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
    发表于 09-18 10:26 8次下载

    c语言static的作用

    全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。第三、static修饰函数,则这个函数的只能在本文件中调用,不能被其他文件调用。
    发表于 11-03 09:36 1.5w次阅读

    C语言register变量和extern及static等知识总结

    register变量必须是单个的值,并且其长度应小于或等于整型的长度。但是,有些机器的寄存器也能存放浮点数。 register变量可能不存放在内存中,所以不能用取址符运算符 。 只
    发表于 11-21 10:20 5次下载

    C语言关键字static有哪些绝妙用途

    为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是静态变量,在
    发表于 07-18 17:38 1次下载
    C语言关键字<b class='flag-5'>static</b>有哪些绝妙用途

    分析如何远离漫天飞舞的全局变量

    来源:嵌入式大杂烩 前篇 《由static谈谈模块封装》 基本实现了对外隐藏属性,隐藏局部模块
    的头像 发表于 09-15 13:49 1636次阅读

    static谈谈模块封装

    static的用法对于很多刚刚开始接触开发的朋友来说,可能没理解其真正的用途,虽说这个是老生常谈的话题,但这也是高频面试要点,所以本...
    发表于 01-26 18:00 0次下载
    由<b class='flag-5'>static</b><b class='flag-5'>来</b>谈谈<b class='flag-5'>模块</b><b class='flag-5'>封装</b>

    为什么C++单例模式不能直接全部使用static变量static函数呢?

    通过getInstance()函数获取单例对象,这种模式的关键之处不是在于强迫你用函数来获取对象。关键之处是让static对象定义在函数内部,变成局部static变量。看下这种实现方式
    的头像 发表于 06-05 14:14 1566次阅读

    Static变量和Local变量的区别

    变量可以分为3类,即Static、Automatic、和Local。如下表所示。
    的头像 发表于 10-12 09:35 1384次阅读

    C语言的static究竟限制了谁?介绍种绕开static限制的方法

    大佬们,问比较低智问题,static修饰的变量不是只能被当前文件所调用吗?为什么这里在其他.c文件可以调用get_board_led_opr这个函数获取board_demo_led
    的头像 发表于 07-28 15:10 1170次阅读
    C语言的<b class='flag-5'>static</b>究竟限制了谁?介绍<b class='flag-5'>一</b>种绕开<b class='flag-5'>static</b>限制的方法

    Java中对static关键词的介绍

    static 是Java的关键字,可以用来修饰成员变量、修饰成员方法、构造静态代码块、实现静态导包以及
    的头像 发表于 10-11 15:26 478次阅读
    Java中对<b class='flag-5'>static</b>关键词的介绍

    static关键字的三种用法

    (StaticVariables):在C语言中,使用`static`关键字声明静态变量种常见的用法,它具有以下主要作用:1.生存期延长:静态
    的头像 发表于 11-10 08:00 516次阅读
    <b class='flag-5'>static</b>关键字的三种用法