1、extern
变量的声明:向程序表名变量的类型和名字,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。
变量的定义:申请存储空间,并将其与变量名相关联,除此之外,还可以为变量指定初始值。
变量可以声明多次,但只能定义一次。
在C++中,凡是没有带extern的声明同时也都是定义。而对函数而言,带有{}是定义,否则是声明。如果想声明一个变量而非定义它,就在变量名前添加关键字extern,且不要显式的初始化变量。
1.1 非常量全局变量的外部链接
最常见的用法,当链接器在一个全局变量声明前看到extern关键字,它会尝试在其他文件中寻找这个变量的定义。这里强调全局且非常量的原因是,全局非常量的变量默认是外部链接的。
1.2 常量全局变量的外部链接
常量全局变量默认是内部链接的,所以想要在文件间传递常量全局变量需要在定义时指明extern。
1.3 使用其他语言规范
如extern C。
2、extern C
extern指明当前声明使用了C语言的链接规范。
C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会(C语言不支持函数重载),因此会造成链接时无法找到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。