利用static属性隐藏变量和函数的名字
2008-10-07 15:56
309 查看
C程序员使用static属性在模块内部隐藏变量和函数声明,就像你在Java和C++中使用public和private声明一样。C源代码文件扮演模块的角色,任何声明带有static属性的全局变量或者函数都是模块私有的。类似地,任何声明为不待static属性的全局变量和函数都是公共的,可以被其他模块访问。尽可能用static属性来保护你的变量和函数是很好地编程习惯。
——摘自《深入理解计算机系统》第七章7.5
我自己再补充两句,如果在一个文件中用extern属性声明一个变量或函数,那么这个变量或函数就可以被其他模块中的函数所引用。如果一个变量在一个模块中但不是在这个模块的汉书中定义,那么这个变量可以被这个模块中的任何函数所引用(也就是其为模块中的全局变量),但是不能被这个模块以外的函数引用。类似地,函数也是如此。另外,在一个模块的函数内是否用static属性定义变量,该变量的存储方式是不一样的。如果在函数内不用static属性定义变量,则变量在栈中创建。函数的生命周期一结束,该变量也就over了。而用static属性定义变量,该变量会存储在静态存储区(可能是堆中),函数一完其也跟着完。但是正如以上所言,其他函数无法访问或引用该函数的这个static变量。
相关文章推荐
- 父类的正常成员函数子类可以使用,并不是继承下来 的,子类是怎么调用父类的函数 : 可能是利用了一种叫函数名联编的方法.没有隐藏的情况下用函数名字来决定调用的函数.
- static作用(修饰函数、局部变量、全局变量),说白了就是隐藏功能
- js中函数期望的参数个数测试,利用变量名.length属性
- static作用(修饰函数、局部变量、全局变量)
- 变量和函数的作用域、链接属性、存储范围
- static作用(修饰函数、局部变量、全局变量)转自http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.html
- 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字
- 变量和函数是否应该设置为static
- x264中open_file_yuv函数欣赏(顺便谈谈如何利用指针在被调函数中改变主调函数中变量的值)
- static作用之修饰函数、局部变量、全局变量
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- jQuery闭包解决ajax无法给外部变量赋值利用函数操作$.proxy()
- static变量; static函数
- static 和全局变量(函数)的exercise
- 关于static和final修饰类的属性变量以及变量的初始化
- c++中关键字static在普通变量及函数详解及实例运行答案
- c++中关键字static在普通变量及函数详解及实例运行答案
- Static和Final修饰类属性变量及初始化(转载)
- 作用域、链接属性、存储类型示例——文件之间变量、函数的关系
- R语言:利用caret包中的dummyVars函数进行虚拟变量处理