Static、Extern、Volatile及Const关键字总结

来源:互联网 发布:未闻花名网络歌手下载 编辑:程序博客网 时间:2024/05/20 12:25

Static、Extern、Volatile及Const关键字总结

关键字static                                                                                                                         

关键字Const有什么作用?

staticC中主要用于定义全局静态变量、定义局部静态变量、定义静态函数。在C++中新增了两种作用:定义静态数据成员、静态函数成员。

注意:因为static定义的变量分配在静态区,所以其定义的变量的默认值为0,普通变量的默认值为随机数,在定义指针变量时要特别注意。

关键字Const在C中的具体作用分析

C语言中,关键字static本地化数据和代码范围的好处,其三个明显的作用:

1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2.在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3.在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

C\C++static的区别分析

Cstatic用来修饰局部静态变量和外部静态变量、函数。而C++中除了上述功能外,还用来定义类的成员变量和函数,即静态成员和静态成员函数。

注意:编程时static的记忆性、全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而C++的静态成员则可以在多个对象实例间进行通信,传递信息。

关键字extern                                                                                                                      

extern的作用是什么?

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。

告诉编译器这个变量或者函数的定义不在当前的代码中,等到连接时从别的地方找,如果找到了就可以正常编译,如果找不到就编译失败。

在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:[extern]  函数类型  函数名(函数参数表){……}调用外部函数时,需要对其进行说明:[extern]  函数类型  函数名(参数类型表)[,函数名2(参数类型表2)……]

C\C++函数兼容时externC”的作用  

C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?  

答案与分析:C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况。此时C函数就需要用externC”进行链接指定,这告诉编译器请保持我的名称,不要给我生成用于链接的中间函数名。  

下面是一个标准的写法:

//.h文件的头上

#ifdef __cplusplus

#if __cplusplus

extern "C"{ 

#endif 

#endif  /* __cplusplus */  

 

//.h文件结束的地方 

#ifdef __cplusplus

#if __cplusplus

}

#endif

#endif  /* __cplusplus */ 

关键字volatile                                                                                             

关键字volatile有什么含意?并给出三个不同的例子?

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

下面是volatile变量的几个例子:

1.并行设备的硬件寄存器(如:状态寄存器);

2.一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

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

分析:搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。

关键字const                                                                                                 

关键字Const有什么用途?

(1)可以定义const常量。

(2)const可以修饰函数的参数和返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

分析:

const用来定义一个只读的变量或对象。主要优点:便于类型检查、同宏定义一样可以方便地进行参数的修改和调整、节省空间,避免不必要的内存分配、可为函数重载提供参考。

const修饰函数参数,是一种编程规范的要求,便于阅读,一看即知这个参数不能被改变,实现时不易出错。

关键字Const有什么含义?

const修饰的对象意味着该对象是“只读”,但不意味着“常数”;

1.关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。

2.通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

3.合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

例子:

const int a;  // a是一个常整型数

int const a;  // a是一个常整型数

const int *a;  // a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)

int * const a;  // a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)

int const * a const;  // a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)

 

Const与#define相比有什么不同?

 

C\C++Const的区别分析

分析:

使用范围区别:

在C程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值。

在C++程序中,它还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中的数据成员。

使用时区别:

在C中,const的意思是“一个不能被改变的普通变量,是只读的”,它总是占用内存且C编译器不能把const看成一个编译期间的变量。

例子:

const buffsize = 100;

char buf[bufsize];//C编译出错,而C++支持编译成功。因为编译不知道const变量的值。

另外,在C中默认const是外部连接的,而C++const变量默认是内部连接的。

int num = 3;

const int buffsize = num;

char buf[buffsize];//C++编译出错,因为非const变量及要到运行阶段才知道其值的const变量都不能用于定义数组的维数;

例子:

const bufsize;    //C++中这样是不对的,而C支持,因C编译器则把它当作一个声明,指明在别的地方有内存定义分配。如果在C++中要实现Cconst的外部连接则必须使用extern把内部连接改成外部extern const bufsize,该形式亦可作为C中的外部声明。C中限定符const不是很有用,所以C迫使程序员在预处理器里使用#define。但是C++中则应尽量避免使用#define而换成const

(哎,在word上调好的格式粘贴过来全乱了,这排版暂时只能凑合着看吧,等哪天研究透了CSDN排版再修改。PS:每天进步一点点~)

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 25岁掉头发厉害怎么办 我25岁经常掉头发怎么办 25岁掉头发很厉害怎么办 我今年25岁掉头发怎么办 头顶头发稀少怎么办有方法吗 头发又干又黄怎么办 2岁宝宝头发细软怎么办 头发突然变得稀疏了怎么办 孕期掉头发很厉害怎么办 冬天头发掉的厉害怎么办 怀孕期间掉头发比较严重怎么办 头发油腻容易掉发怎么办 最近头发掉的厉害怎么办 头发新长的绒毛怎么办 久躺床上头发黏在一起怎么办 头发长油怎么办小妙招 头发出油多脱发怎么办 头发出油掉头发怎么办 在英国狂掉头发怎么办 我头发油头皮痒脱发怎么办 油性头发容易掉发怎么办 洗了头发很蓬松怎么办 小孩头皮黄掉头发怎么办 头发又油又掉发怎么办 英国的水掉头发怎么办 洗发为什么会掉头发怎么办 头发老掉怎么办吃什么 19岁掉头发严重怎么办 头发总是从根掉怎么办 18岁掉头发很厉害怎么办 20岁脱发严重该怎么办 22岁m型脱发严重怎么办 22掉头发很厉害怎么办 哺乳期头发掉的很厉害怎么办 失眠多梦掉头发怎么办 老婆生完孩子掉头发怎么办 16岁发际线高怎么办 生了小孩头发掉怎么办 16岁头发掉的厉害怎么办 经常脱发严重不长头发怎么办 产后3年一直脱发怎么办