程序小白
认证:优质创作者
所在专题目录 查看专题
关于软件的作用域和生命周期的一些理解
浅析RTOS中的钩子函数(HOOK)
RTOS的时间片调度不同处——FreeRTOS与RTT
FreeRTOS中任务间的同步——事件组与全局变量
FreeRTOS的优先级翻转与继承
作者动态 更多
小小调度器——开局default,优雅总藏于细节之中
04-02 09:23
小小调度器——调度器核心的纯C实现
04-01 14:09
小小调度器——原来C代码还能这么写,原作者没少挨打吧!
03-27 15:42
解析由系统库引发的hardfault血案(RT-Thread+ESP32)
2023-07-17 16:04
TINA瞬时现象仿真分析——运放缓冲器振铃
2023-02-28 11:38

关于软件的作用域和生命周期的一些理解

      C语言中最重要的就是函数与变量。

      C语言可以说是规则最少的高级语言,好处是学起来好学,坏处用起来难用(主要真针对大型项目复杂应用)。

      好像C语言从来没有一个专题来讲“域”的概念,或者总是隐晦的给出,因为这个问题更确切的应该来自于一种编程的理念,准确的说C只是一种面向过程实现的语言,语言的本质只是工具。

软件是有生命周期的,除了main函数中的while(1)以外,

      假如你从事的项目,所有的软件细节都是由你一个人编写,你可能会忽略域的概念,大型的软件总是有很多人参与,每个人的权限总是需要受到限制,这里所谓的限制就是你对于整个软件系统资源的权限。

      全局变量、局部变量、函数复用放到一起聊一聊。

      全局变量,当你定义以后,他的作用域就是全局的,也就是在整个软件生命周期中(软件没有结束运行之前),任何函数都可以访问该变量,这种情况下一个变量的作用域是全局的,生命周期是无限的。

      假如把while(1)去掉,那么在这个软件执行完最后一行代码的时候,整个软件就结束了,其生命周期也就结束了。

      局部变量,往往定义在函数内部,假设他是静态局部变量,那么他的作用域是在整个函数的内部,你在其定义函数的外部任何地方想要对其访问都是非法的,他是整个函数不可分割的一部分,也就是他们是一个整体,外部无法处理,也就不会被破坏。虽然他从外部无法被访问但是他的生命周期是无限的。

      假如他被定义成非静态的局部变量那么的生命周期是有限的,仅存在于函数被调用的范围内。当函数完成调用以后,变量所占用的空间将被释放。

      接下里聊一聊函数复用,软件终极理念之一便是“复用”,当然不是这里的狭隘的函数复用,所谓的函数复用,就是你编写的一个函数,可以直接被他人应用,或者以源码的方式or以库的方式添加到他人的工程中。

      假如一个函数中应用了全局变量,那么他不再是一个可复用的函数,全局变量定义的位置是在函数的外部,如果在函数中直接访问全局变量,那么函数的完整性就被破坏了,有的小伙伴会想,那么我把其使用的全局变量一起移植到新的软件工程当中不就OK了?

      这样做到底可不可以?你要明白一件事情,为什么函数要访问一个全局变量,或者是外部变量,那么函数想要完成的功能无法仅凭内部实现,需要外部协助,全局变量只是牵了一条线,实际是由于全局变量相关的多个函数协同完成。所以函数不在具备复用性。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 2
关注 115
成为作者 赚取收益
全部留言
0/200
  • chaochao1545 2021-10-12 13:35
    围观学习
    回复