【C++关键字】 extern

一、 extern 关键字

extern 是C/C++语言中表明全局变量或者函数作用范围(可见性)的关键字,编译器收到extern通知,则其声明的变量或者函数可以在本模块或者其他模块使用。extern关键字的作用是共享代码。

注意事项:它的作用就是声明函数或全局变量的作用范围的关键字,仅仅是声明,不是定义,不分配空间

extern可以修饰函数和变量,但是一般不用于函数,重点是用于变量的情况。

// myheader.h
extern int globalVar; // 只是声明,不是定义
// file1.cpp
#include "myheader.h"
int globalVar = 42; // 这是定义,分配存储空间
// file2.cpp
#include "myheader.h"
// 此处不需要再次定义 globalVar,因为头文件中已经声明了它的存在

场景一:

处于同一个文件中,C++中变量一般是先定义再使用,那如果想先使用,再定义呢?亦或者定义再后,使用在前,使用时没有访问权限呢?

就可以先编写代码,最后定义变量,最后在初始处 使用extern进行声明即可。显然这种用法多此一举,没有多大意义。

  • 举例如下:
#include
using namespace std;
extern int a;
extern int b;
int gcd(int a, int b) {
	int c = 0;
	while (b != 0)
	{
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}
int main() {
	cout << gcd(a, b) << endl;
	cout << "YES! PF!" << endl;
}

int a = 12;
int b = 18;

场景二:

在一个文件中定义一个全局变量,在另外一个文件中需要使用同一个 变量

  • 举例如下:
    在同一个目录文件下
    【C++关键字】 extern_第1张图片

去除掉extern1中的extern可以看到:
【C++关键字】 extern_第2张图片
可以顺利运行

去除掉extern2中的extern可以看到:
【C++关键字】 extern_第3张图片
去除掉extern1和extern2中的extern可以看到:
【C++关键字】 extern_第4张图片
总结:
当在一个文件中定义之后,另外一个文件使用的时候,需要加extern,如果不加会导致重复定义,报错!
所以在实际编码的时候,可以在定义变量的时候使用这个关键字,在使用的时候也加上这个关键字。

推荐使用格式:

  • 首先定义一个mod.h文件,用来声明其他文件需要访问的变量或者函数(使用extern修饰);
  • 定义一个cpp文件,包含mod.h,初始化mod.h文件中的变量或者函数实现;
  • 在使用的时候使用extern进行修饰,说明是访问外部其他变量。
    更多的时候是使用类的成员来替代。

重要的结论:
使用 extern 修饰的变量在链接的时候只找寻同名的标号,不检查类型,所以才会导致编译通过,运行时出错。

1、在其他文件中定义过的全局变量,在另一个文件中要调用时,只需在声明语句前加关键字extern。

 文件1,定义变量
int i= 1;
 文件2,声明变量

extern int i;

2、对于常量,要调用其他文件的常量时,做法如下:

 文件1,定义常量
extern const int i = 1;
文件2,声明常量
 extern const int i;

extern “C”

extern "C"的真实目的是实现类C和C++的混合编程,不做详细解释。

你可能感兴趣的:(#,C++基础,c++)