C++ | 关于extern关键字的使用

691 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言:

extern是C++中的一个关键字,它可以放在变量或者函数前,用来表示这个变量或者函数的定义在别的文件中,提示编译器如果遇到这个变量或者函数,就去别的文件中找它的定义。

extern变量:

正常的在一个源文件中定义的变量和函数只能被本源文件中的函数调用,但是一个C++程序中会有许多源文件,为了要解决使用非本源文件中的全局变量,C++就提供了extern关键字来解决这个问题。在使用其他源文件中的全局变量时,只需要在本源文件中使用extern关键字来声明这个变量即可。

例如:

//在test1.cpp源文件中定义全局变量a、b、c
int a,b;//外部变量定义
char c;//外部变量定义
void main()
{
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
}
//在test2.cpp源文件中要使用test1.cpp源文件中的全局变量a、b、c
extern int a,b;
extern int c;
func (int x, int y)
{
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
}

test2.cpp源文件中,编译系统不再为全局变量a、b、c分配内存空间,而是使用或改变全局变量a、b、c的值,如果在test2.cpp中改变全局变量a、b、c的值的话,那么test1.cpp源文件中输出的值也会发生变化。

extern函数声明:

extern除了修饰变量外,还可以修饰函数声明。extern出现在函数声明前,表示这个函数在其他文件中定义,与修饰变量的功能是一样的。

extern "C":

有时会在C++程序中看到extern "C"{}的使用情况,这是一种特殊的用法。extern "C"中的C,表示一种编译和连接归约,表示符合C语言的编译和连接规约的任何语言。实现C和C++的混合编程,让C++程序可以和C语言程序采用一种语法形式。