《c和指针》之总结 二

3、数据

         具有external链接属性的实体在其他语言的术语里称为全局(global)实体,所有源文件中的所有函数均可以访问他。只要变量并非声明于代码块或函数定义内部,它在缺省情况下的链接属性即为external。如果一个变量声明于代码块内部,在它前面添加extern关键字将使它所引用的是全局变量而非局部变量。

         具有external链接属性的实体总是具有静态存储类型。全局变量在程序开始执行前创建,并在程序整个执行过程中始终存在。从属于函数的局部变量在函数开始执行时创建,在函数执行完毕后销毁,但用于执行函数的机器指令在程序的生命期内一直存在。

         局部变量由函数内部使用,不能被其他函数通过名字引用。它在缺省情况下的存储类型为自动,这是基于两个原因:其一,当这些变量需要时才为它们分配存储,这样可以减少内存的总需求量。其二,在堆栈上为他们分配存储可以有效地实现递归。如果你觉得让变量的值在函数的多次调用中始终保持原先的值非常重要的话,你可以修改它的存储类型,把它从自动变量改为静态变量。总结如下:

作用域、链接属性和存储类型总结

变量类型

声明的位置

是否存于堆栈

作用域

如果声明为static

全局

所有代码块之外

1

从声明处到文件尾

不允许从其他源文件访问

局部

代码块起始处

2

整个代码块3

变量不存储于堆栈中,它的值在程序整个执行期一直保存

形式参数

函数头部

2

整个函数3

不允许

*1、存储于堆栈的变量只有当该代码块处于活动期间,他们才能保持自己的值。当程序的执行流离开该代码块时,这些变量的值将丢失。

*2、并非存储于堆栈的变量在程序开始执行时创建,并在整个程序执行期间一直保持他们的值,不管他们是全局还是局部变量。

*3、有一个例外,就是在嵌套的代码块中分别声明了相同名字的变量。

         为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围的交集之内,或者不要在字符上执行算术运算。在定义类型的新名字时,使用typedef而不是#define。用const声明其值不会修改的变量。除了实体的具体定义位置之外,在它的其他声明位置都使用extern关键字。

4、语句

         当循环内部执行break语句时,循环就会退出。当循环内部执行continue语句时,循环体的剩余部分便被跳过,立即开始下一次循环。在while和do循环中,下一次循环开始的位置是表达式测试部分。但在for循环中,下一次循环开始的位置是调整部分。 在每个switch语句中都使用default子句。

 

posted @ 2010-05-23 16:20  stardream  阅读(198)  评论(0)    收藏  举报