1.标识符的作用域
作用域分为局部作用域和全局作用域;
局部作用域是指在{ }内的作用域,标识符和定义的变量存储在栈区;
全局作用域是指没有在{ }内的作用域,标识符和定义的变量存储在静态区(全局区);
一般在全局变量的标识符前加g_,如果全局变量未被初始化,则会位清零;
所有的函数名都在全局作用域;
2.标识符的四个规则
(1)标识符必须先定义再使用;
(2)在同一作用域不能定义同名标识符;
(3)在没有包含关系的作用域中定义同名的标识符互不影响;
(4)在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见;
3.变量的生存期
分为静态生存期和动态生成期;
静态生存期:从程序开始到程序结束,如:全局变量和局部变量;
动态生存期:
1 autu变量
函数中的局部变量,如果不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中
2static变量
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。通过下面简单的例子可以了解它的特点。
3register变量
一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放,
4用extern定义外部变量
外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。
有时需要用extern来声明外部变量,以扩展外部变量的作用域。
5用static声明外部变量
外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。
有时需要用extern来声明外部变量,以扩展外部变量的作用域。
内部函数
内部函数又称静态函数,因为它是用static声明的。使用内部函数,可以使函数的作用域只局限于所在文件,在不同的文件中有同名的内部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不必担心所用函数是否会与其他文件中函数同名,通常把只能由同一文件使用的函数和外部变量放在一个文件中,在它们前面都冠以static 使之局部化,其他文件不能引用。
外部函数
(1)在定义函数时,如果在函数首部的最左端加关键字 extern,则表示此函数是外部函数,可供其他文件调用。
(2)在需要调用此函数的文件中,用extern对函数作声明,表示该函数是在其他文件中定义的外部函数。