变量的定义与声明(2)
0赞
发表于 8/29/2010 9:29:57 PM
阅读(2459)
4.常变量的声明
为了提高程序的可阅读性与可维护性,ANSI C允许用户命名常量(named constant,声明为const的变量)。
当它被初始化之后,它的值便不能改变。
ANSI C规定:可以使用const关键字声明常量,修饰符const可以用在类型说明符前,也可以用在类型说明符后。比如:
int const MAX_LENGTH = 78; // 命名常变量的最佳方式是使用大写字母
const int MAX_LENGTH = 78; // MAX_LENGTH的初值为78
虽然const修饰的值是常量,而实际上MAX_LENGTH却是一个只读变量。通过汇编代码可以看出,编译器仅
仅给出了MAX_LENGTH变量对应的内存地址,却并没有为MAX_LENGTH变量分配存储空间,而是将其保存在符号表中,编译器在编译时直接进行“替换”优化。
☛ 注意:const除了可以修饰只读变量之外,还可以用于修饰数组、指针、函数的参数与函数的返回值,详见后续相关章节的描述。
5. 标识符
变量的定义都是以“标识符”开始的,比如,int、float就是定义变量类型的标识符。虽然ANSI C并没有规定标识符的长度,但各个编译器都有自己的规定,比如,Turbo C则允许变量名最多不超过32个字母。
一个定义只能指定一种变量类型,虽然后面所带的变量表可以包含一个或多个该类型的变量:
int lower_limit , upper_limit , sum;
但如果将一个定义语句中的多个变量拆开在多个定义语句中定义的话:
int lower_limit; // lower_limit为数据下限
int upper_limit; // upper_limit为数据上限
int sum; // sum为求和的结果
则可在各个定义语句中添加注释,则大大提高了程序的可阅读性,而且修改起来更加方便,但C编译器会忽略在每行右边用于描述变量用途的注释语句。与此同时还可以在定义中,对变量进行初始化,即允许在变量名的后面紧跟一个等号以及一个表达式。
int lower_limit = 1;
int upper_limit= lower_limit+50;
int sum;
☛ 关键知识点:变量的声明与定义
广义地说,声明包含定义,但并非所有的声明都是定义。对于“int lower_limit;”来说,它既是声明又是定义;而对“extern lower_limit;”来说,它是声明不是定义。
“声明”仅仅告诉编译器变量名的值的类型而已,不会生成目标代码,当然也不会给它分配存储空间,更不会增大可执行程序的体积。由于声明并不分配存储空间,因此同一个声明可以在程序中多次出现。它的位置可在执行代码之外,也可在执行代码里面。
而“定义”不仅要告诉编译器变量名的值的类型,而且还要给变量分配存储空间。既然在定义变量时就已经建立了存储空间,那么变量的定义只能出现一次,且它的位置在所有执行代码之外。
由于系统是根据外部变量的“定义”来分配存储空间的,因此对外部变量的初始化只能在“定义”时进行,不能在“声明”中进行,而“声明”则是告诉编译器,该变量已经存在。
