一、定义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; }