C++ extern关键字的详细阐述

发布时间:2023-05-22

一、定义extern关键字

extern关键字是C++中一个非常关键的概念,它用于表示变量或函数是在其他文件或模块中定义的。extern关键字告诉编译器,在程序的其他位置存在一个符号的定义。例如,在一个文件中定义了一个全局变量,而在另一个文件中需要使用这个变量,则需要在使用的文件中声明该变量是extern的。

二、全局变量和函数声明

在C++中,声明全局变量时可以使用extern关键字进行修饰。例如:

extern int g_var;

这样可以告诉编译器,g_var变量不是当前这个文件所定义的,而是在其他文件中定义的。声明全局函数时也可以使用extern关键字:

extern void hello();

三、extern的用法

extern关键字有以下用法:

1. 引用全局变量或函数

如果需要在一个文件中使用另一个文件中定义的全局变量或函数,可以使用extern关键字进行声明。例如:

//File1.cpp
int g_var = 1;
void hello() {
    std::cout << "Hello World!" << std::endl;
}
//File2.cpp
extern int g_var;
extern void hello();
int main() {
    std::cout << g_var << std::endl; //输出 1
    hello(); //输出 "Hello World!"
    return 0;
}

2. 定义全局变量

如果在一个文件中定义了一个全局变量,那么在其他文件中使用该变量时,需要使用extern关键字进行声明。例如:

//File1.cpp
int g_var = 1;
//File2.cpp
extern int g_var;
int main() {
    std::cout << g_var << std::endl; //输出 1
    return 0;
}

3. 定义全局函数

如果在一个文件中定义了一个全局函数,那么在其他文件中使用该函数时,需要使用extern关键字进行声明。例如:

//File1.cpp
void hello() {
    std::cout << "Hello World!" << std::endl;
}
//File2.cpp
extern void hello();
int main() {
    hello(); //输出 "Hello World!"
    return 0;
}

四、extern的注意事项

在使用extern关键字时,需要注意以下几点:

1. 定义和声明的类型必须完全一致

在定义和声明变量或函数时,它们的类型必须完全一致,否则会导致编译错误。例如:

//File1.cpp
int g_var = 1;
//File2.cpp
extern float g_var; //错误:类型不匹配
extern int hello();
double hello(); //错误:类型不匹配

2. 多次定义一个变量会导致编译错误

如果在程序中多次定义同一个变量,会导致编译错误。例如:

//File1.cpp
int g_var = 1;
//File2.cpp
int g_var = 2; //错误:重复定义

如果需要在多个文件中使用同一个变量,只需要在一个文件中定义,并在其他文件中使用extern进行声明即可。

五、代码示例

下面是一个完整的示例:

//File1.cpp
#include <iostream>
extern int g_var;
extern void hello();
int main() {
    std::cout << g_var << std::endl; //输出 1
    hello(); //输出 "Hello World!"
    return 0;
}
//File2.cpp
int g_var = 1;
void hello() {
    std::cout << "Hello World!" << std::endl;
}