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

来源:互联网 发布:json 数据格式 编辑:程序博客网 时间:2024/06/06 08:36

**

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不可以,只允许对象本身用它.具体差别首先,static与extern是一对“水火不容”的家伙,也就是说extern和static不能同时修饰一个变量;其次,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”。

1 0
原创粉丝点击