C语言中最重要的就是函数与变量。
C语言可以说是规则最少的高级语言,好处是学起来好学,坏处用起来难用(主要真针对大型项目复杂应用)。
好像C语言从来没有一个专题来讲“域”的概念,或者总是隐晦的给出,因为这个问题更确切的应该来自于一种编程的理念,准确的说C只是一种面向过程实现的语言,语言的本质只是工具。
软件是有生命周期的,除了main函数中的while(1)以外,
假如你从事的项目,所有的软件细节都是由你一个人编写,你可能会忽略域的概念,大型的软件总是有很多人参与,每个人的权限总是需要受到限制,这里所谓的限制就是你对于整个软件系统资源的权限。
全局变量、局部变量、函数复用放到一起聊一聊。
全局变量,当你定义以后,他的作用域就是全局的,也就是在整个软件生命周期中(软件没有结束运行之前),任何函数都可以访问该变量,这种情况下一个变量的作用域是全局的,生命周期是无限的。
假如把while(1)去掉,那么在这个软件执行完最后一行代码的时候,整个软件就结束了,其生命周期也就结束了。
局部变量,往往定义在函数内部,假设他是静态局部变量,那么他的作用域是在整个函数的内部,你在其定义函数的外部任何地方想要对其访问都是非法的,他是整个函数不可分割的一部分,也就是他们是一个整体,外部无法处理,也就不会被破坏。虽然他从外部无法被访问但是他的生命周期是无限的。
假如他被定义成非静态的局部变量那么的生命周期是有限的,仅存在于函数被调用的范围内。当函数完成调用以后,变量所占用的空间将被释放。
接下里聊一聊函数复用,软件终极理念之一便是“复用”,当然不是这里的狭隘的函数复用,所谓的函数复用,就是你编写的一个函数,可以直接被他人应用,或者以源码的方式or以库的方式添加到他人的工程中。
假如一个函数中应用了全局变量,那么他不再是一个可复用的函数,全局变量定义的位置是在函数的外部,如果在函数中直接访问全局变量,那么函数的完整性就被破坏了,有的小伙伴会想,那么我把其使用的全局变量一起移植到新的软件工程当中不就OK了?
这样做到底可不可以?你要明白一件事情,为什么函数要访问一个全局变量,或者是外部变量,那么函数想要完成的功能无法仅凭内部实现,需要外部协助,全局变量只是牵了一条线,实际是由于全局变量相关的多个函数协同完成。所以函数不在具备复用性。