extern的用法
1. extern修饰变量和函数
声明extern关键字的全局变量和函数可以使得它们能够跨文件被访问
(1)针对同一个文件中的变量
#include <iostream>
using namespace std;
void func();
int main()
{
func();
extern int num;
cout << num << endl; // 如果不使用前一行,则会发生错误使用了未声明的标志符num
return 0;
}
int num = 3;
void func()
{
cout << num << endl;
}
//如果没有声明extern int num; 在main函数中调用num,则未定义,因为int num=3;定义在main函数后,将定义放在前面就可以使用,当然也可以使用extern,但是不建议
(2)不同文件中使用extern
一般在头文件中声明extern修饰的函数和变量,在cpp文件中实现
它的作用就是: 声明的函数和变量可以在本编译单元或其他编译单元中使用。 即B编译单元要引用A编译单元中定义的全局变量或函数时,B编译单元只要包含A编译单元的头文件即可,在编译阶段,B编译单元虽然找不到该函数或变量,但它不会报错,它会在链接时从A编译单元生成的目标代码中找到此函数
2. extern "C"
如 extern "C" {void fun(int a, int b);},它的作用是:编译器在编译fun这个函数名时按C的规则去翻译相应的函数名而不是C++的。
3. extern, const, static
- extern和static不能同时修饰一个变量,它们的含义背道而驰
- const单独修饰的全局变量跟static具有相同的特性,即它们只能作用于本编译模块中,而当const与extern一起的时候,特性就跟extern的一样,只不过使用const修饰后这个变量不可以被修改