分类: C/C++
2011-06-02 21:05:03
这两天在学校改论文格式,格式要求变来变去 比较郁闷……
在图书馆好好看书时候少,能找出一大块时间来 写写博客 提升一下我这半吊子c语言的技术更少,是不是以后上了班就更少了呢……趁7月份之前 争取完成这个连载吧
书接上回,第三章后一半讲了代码的作用域、链接属性、和存储类型
一:作用域
编译器一共有4种作用域——1文件作用域,2函数作用域,3代码块作用域,4原型作用域
代码块作用域:就是内层函数中的标识符(花括号之间) 如果和外层标识符同名的话,内层的标识符就会屏蔽掉外层标识符,外层的标识符在内层将会不起作用。
比如:
内层的f和外层的f就相当于是不同的变量
文件作用域:就是全局变量,还包括#include。
原型作用域:指的是原函数声明中的参数名。书上原话是:原型作用域防止这些参数名与程序其他部分的名字冲突。我查了半天,感觉意思就是,声明的函数比如上边(2)处的h,不能和其他函数的参数生命重名。
函数作用域:书上说就是goto的作用域,不过不推荐用 我就本着不用goto的原则 不研究下去了 哈
二:链接属性
链接属性分为——1 external,2 internal,3 none
在缺省模式下,全局变量 函数名的链接属性都是external,其他均为none
这里的关键标志符是:entern和static。
能将变量a 或者函数b标记为源文件所有,和不被其他源文件调用
但是如果在上边int d那里加static 情况就不一样了,只会改变d的存储类型为静态,不改变作用域。对于动态函数的static 在后边存储类型那总结一下。
三:存储类型
有2种存储类型——1 静态存储,2 动态存储
在代码块之外声明的,一般都是静态存储(static),在代码块内部声明的,一般都是动态存储的(auto)。
对于代码块外声明的,无法制定其他存储类型。对于代码块内部声明的便利那个,如果加上static,会把它的存储类型改编成静态,变量在整个函数执行过程都存在。
四:总结一下static的用法
Static用于代码块之外的变量声明时:用于修改标识符的链接属性(从external改为internal),存储类型和作用域不受影响。这种声明只能够在源文件中访问
Static用于代码块内的变量声明时:static用于修改变量的存储类型(由自动到静态变量)
五:有个习题示例