c语言的常用关键字,C语言编程技巧——常用关键字

C语言中包含一些常见的关键字,而这类关键字对于整个程序的效率等都会造成一定的影响,因此在C语言编程中需要重点注意。

一、volatile关键字

volatile影响编译器编译的结果,告诉编译器volatile变量是随时可能发生变化的。从而每次都必须从该变量的地址中读取值,而不是直接从寄存器中读取,可以保证特殊地址的稳定访问,不会出错。

主要应用场合:

1、并行设备的硬件寄存器,访问时值已经被其他设备修改,但寄存器中依然是旧值。

2、一个中断服务子程序中会访问的非自动变量

3、多线程应用中被几个任务共享的变量。

主要作用:

1、告诉编译器对此变量不能做任何优化

2、表示用volatile定义的变量会在程序外被改变,每次必须从内存中读取,而不能将其放在cache或寄存器中重复使用。

二、register关键字

register关键字请求编译器尽可能将变量存在CPU内部寄存器中,而不通过内存寻址访问,提高效率。

register修饰符通常用于被频繁使用的变量,可以大大加快存储速度。

注意:

1、register变量必须是能被CPU所接受的类型,变量必须是一个单个的值,且长度应小于或等于整型的长度。

2、register变量可能不存放在内存中,不能用&来获取register变量的地址。

三、static关键字

static关键字的主要作用:

1、修饰变量

对于用static修饰的变量分为全局变量和局部变量,这些变量存在内存的静态区。使用static声明的全局变量,只能被当前文件中的代码调用,且是定义在该定义之后的代码,外部文件即使使用了extern关键字声明也是不能够使用的,其准确的作用域在从定义处到该文件结束。

使用static声明的局部变量,在函数体内部声明的局部变量只能在这个函数体内部使用,不能再其他地方使用,由于有static关键声明,因此在函数结束时,这个静态变量的值并不会被销毁,在下次调用时又能继续调用,合理使用此关键字可以实现一些比较有用的功能,比如在函数内部用于统计此函数的调用次数之类的功能。

2、修饰函数

函数前加static使得函数成为静态函数。此处static的含义不是指存储方式,而是指函数的作用域仅局限于本文件,又称为内部函数,其他文件中无法得到调用。内部函数的好处是:不同人编写的不同函数时,不用担心自己定义的函数会在其他文件中的函数同名。

四、const关键字

const准确的说应该是一个只读的变量,其值在编译时不能被使用,修饰的只读变量。被const修饰的只读变量必须在定义的同时初始化。

且在C语言中,其不能被用于初始化一个数组,因为const定义的也是一个变量,只不过是一个只读变量而已。

编译器通常不为普通const只读变量分配存储空间,而是将他们保存在符号表中,使得其成为一个编译期间的值,没有了存储与读内存的操作,使得它效率也很高。

const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像define一样给出的是一个立即数。const定义的只读变量在程序运行过程中只有一份拷贝,存放在静态区。

使用示例:

const修饰数组:定义或说明一个只读数组 int const a[]={};const int a[]={};

const修饰指针:

const int *p; //p可变,p指向的对象不可变

int const *p; //p可变,p指向的对象不可变

int * const p; //p不可变,p指向的对象可变

const int * const p; //p和p指向的对象都不可变

const修饰函数的参数:const修饰符修饰函数的参数时,告诉该参数在函数体中不能改变,防止了使用者的一些无意的或错误的修改。

const修饰函数的返回值:返回值不可被改变。

你可能感兴趣的