【C++关键字】 extern

本文介绍了C++中extern关键字的作用,它用于表明全局变量或函数的作用范围,可实现代码共享。阐述了其在同一文件和不同文件中使用的场景,还给出推荐使用格式,同时指出使用extern修饰的变量在链接时只找同名标号、不检查类型的问题,最后提及extern “C”用于实现类C和C++混合编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 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<iostream>
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;

场景二:

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

  • 举例如下:
    在同一个目录文件下
    在这里插入图片描述

去除掉extern1中的extern可以看到:
在这里插入图片描述
可以顺利运行

去除掉extern2中的extern可以看到:
在这里插入图片描述
去除掉extern1和extern2中的extern可以看到:
在这里插入图片描述
总结:
当在一个文件中定义之后,另外一个文件使用的时候,需要加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++的混合编程,不做详细解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值