C/C++中关键字extren作用总结

来源:互联网 发布:java sftp上传文件 编辑:程序博客网 时间:2024/06/05 07:12

C/C++中关键字extren作用总结

1、基本解释:

 

具体的extern的两种作用:

2、extern变量:

在使用extern时要严格对应声明时的格式,在实际编程中这样

的错误屡见不鲜!

extern用在变量声明时常常有这样的一个作用,在.c文件中声明了一个全局变量,这个全局变量如果要被引用,就要放在.h文件中并用extern声明。

3、单方面修改函数原型:

函数提供单方面修改函数原型时,如果使用方不知情继续沿用原来extern的声明,这样编译器不会报错,但是在运行过程中,因为少了或者多了输入参数,往往会造成系统错误,这样就说明,对extern的使用在不同的场合应该选择不同的做法!

 4、extern 'C':

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

C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到函数的情况,此时将C函数要用extern “C”。

 extern   "C"用在C++里表示,被其修饰的函数,类,结构在编译时按照C的编译规则进行

进行链接指定,这告诉编译器,请保持我的函数名称,不要给我生成用于链接的中间函数名。

5、extern 函数声明:

常常见extern放在函数的前面成为函数的一部分。如果函数的声明中常带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其他作用。在复杂的项目中,把所有的函数声明前加上extern是一个好习惯!并且最好只在头文件中做声明。

6、extern 与static:

(1)extern表明该变量在别的地方已经定义过了,在这里要使用那个变量。

(2)static表示静态的变量,分配内存的时候存储在静态区,不存储在栈上。

 static 作用范围是内部连接的关系,extern有点相反.它和对象本身是分开存储的,extern也是分开存储的,但是extern可以被其他的对象用extern引用,static不可以,只允许对象本身用它.具体差别首先,staticextern是一对水火不容的家伙,也就是说externstatic不能同时修饰一个变量;其次,static修饰的全局变量声明与定义同时进行,也就是说当你在头文件中使用static声明了全局变量后,它也同时被定义了;最后,static修饰全局变量的作用域只能是本身的编译单元,也就是说它的全局只对本编译单元有效,其他编译单元则看不到他。

7、extern 与const:

 C++const修饰的全局常量有跟static相同的特性,即它们只能作用于本编译模块中,但是const可以与extern连用来声明该常量可以作用于其他编译模块中
所以当const单独使用时它就与static相同,而当与extern一起合作的时候,它的特性就跟extern的一样了!所以对const我没有什么可以过多的描述,我只是想提醒你,const char* g_str = "123456" const char g_str[] ="123465"是不同的, 前面那个const修饰的是char *而不是g_str,它的g_str并不是常量,它被看做是一个定义了的全局变量(可以被其他编译单元使用), 所以如果你像让char*g_str遵守const的全局常量的规则,最好这么定义const char* const g_str="123456"。

感觉内容虽然多,但是掌握之后,是不是也没有那么难呢?继续加油吧!

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击