您的位置:首页 > 其它

限定词const和volatile的使用

2016-09-27 23:11 246 查看
一 const的使用

限定词const在C语言中主要用来定义只读变量。只读变量一旦定义,值将不能被修改。

定义格式:

const    变量类型名    变量名   =   初始值;



变量类型名    const    变量名   =   初始值;

例如,

const   int   MAX_NUM  = 10;

const   double    PI = 3.1415927;

MAX_NUM,  PI只读变量定义后, 不能被修改。在C语言中,为了区分开变量, 通常对于const定义的变量名

都采用大写字母表示。这个与java中定义常量含义一样,都用大写字母表示变量名。

一般情况下,const有4个好处。

(1)  提高程序的可读性

比如说计算半径为2的圆面积,s = 3.1415927 * 2 * 2,一般对于不知道圆面积公式或圆周率的朋友,

对于这个计算会一头雾水,完全不知道3.1415927是个啥东西。在C语言中,可以将这串数字定义

为一个只读变量,在程序使用中用变量表示。

eg:

#include "stdio.h"

int main(void) {
/*
常量定义语法格式:
const 数据类型 变量名 = 初始值
*/
const double PI = 3.1415927;/*  精确7位的圆周率 */
double s;/* 定义一个普通变量s表示圆面积 */
/*
圆面积公式: s = PI*r*r,其中PI为圆周率,r为半径,
*/
s = PI*2*2;/* 计算圆的面积 */
printf("s = %f\n", s);/* 通过printf方法将圆面积输出 */
return 0;
}
在以上程序中,程序可读性相对得到保证,因为PI是可以不变的变量,

在程序中应用的地方直接引用变量即可。

(2)  提高程序的可维护性

比如上面的PI定义为7位小数,需求只要改改,让你变成2位小数,只需把PI的初始值改为3.14即可,

如果是每个用到PI的地方,都是用3.1415927,如果需要修改,则所有的地方都需要去修改,维护困难。

(3)  防止变量值被意外的修改

比如,

const double PI = 3.1415927;

......

PI = 3.14;

我们尝试将只读变量的初始值改为3.14,编译器会发出警告,不让重新用=号赋值。

eg:

#include "stdio.h"

int main(void) {
const double PI = 3.1415927;/*  精确7位的圆周率 */
PI = 3.14;/* 尝试重新给PI赋值,编译时编译器将发出警告 */
return 0;
}


(4)  提高程序运行效率

对于const定义的只读变量,编译器一般不会为其分配内存,只是将值保存在符号表中,

程序运行时不需要进行读写内存操作,从而提高程序运行效率。

二 volatile的使用

volatile的英文意思为'易变的',在C语言中作为限定词的volatile告诉编译器通过volatile定义的变量

随时在改变,编译器优化时必须重新读取这个变量的值,不能使用保存在寄存器里的备份值,否则,

容易出现误差。所以一般使用volatile定义的变量是禁止编译器去优化该变量的,通过这种定义方式

可以告诉编译器,这个变量时刻被改变,数值可能在编译器监测不到的情况下去改变量,这个时候

如果允许编译器去优化变量,很容易出错,特别是多线程环境下。

定义格式:

volatile   数据类型名   变量名;



数据类型名   volatile   变量名;

同时可以将const于colatile一起使用,

const    volatile    int    data = 12;

这句话的含义是数据data内存空间的内容可能随时被改变,但是变量的值data的值不会改变。

三   总结

(1)const定义只读变量

(2)volidate定义的变量编译器不作优化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: