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修饰指针:
static修饰的变量const int *p; //p可变,p指向的对象不可变
int const *p; //p可变,p指向的对象不可变
int * const p; //p不可变,p指向的对象可变
const int * const p; //p和p指向的对象都不可变
const修饰函数的参数:const修饰符修饰函数的参数时,告诉该参数在函数体中不能改变,防⽌了使⽤者的⼀些⽆意的或错误的修改。const修饰函数的返回值:返回值不可被改变。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论