12.变量的存储类型-extern变量
12.1 知识点
extern变量
extern
允许在不同文件间共享全局变量和函数。当我们在一个源文件中定义了全局变量或函数时,可以通过 extern
关键字在其他文件中使用定义好的内容。
作用
extern
使得不同文件间可以共享全局变量和函数。- 通过
extern
关键字,可以在其他文件中使用已定义的全局变量或函数。
生命周期
extern
变量的生命周期是整个程序运行期,因为它通常用于全局变量或全局函数。
优点
- 方便管理全局数据,支持跨文件使用相同的全局变量。
缺点
- 全局变量过多会导致程序设计变得复杂,容易引入错误。
- 如果不慎使用,可能导致多个文件对全局变量的修改难以追踪,增加调试和维护的难度。
注意
- 只对确实需要跨文件使用的全局内容使用
extern
。
举例说明
创建新项目 Test
脚本,写入以下代码:
#include <iostream>
using namespace std;
int testI = 10;
string testStr = "123";
void test(int i)
{
cout << "Test" << i << endl;
}
当前脚本声明外部变量和函数:
// 外部变量
extern int testI;
extern string testStr;
// 外部函数
extern void test(int i);
使用:
cout << testI << endl; // 10
cout << testStr << endl; // 123
test(101); // Test101
使用外部变量时的注意点
当多个文件中有重名的全局变量:
- 不会出现这种情况,因为 C++ 中不允许在多个
.cpp
文件中定义同名全局变量,会直接报错。
- 不会出现这种情况,因为 C++ 中不允许在多个
同一作用域定义同名变量:
- 不会出现这种情况,因为 C++ 中不允许在多个
.cpp
文件中定义同名全局变量,会直接报错。
- 不会出现这种情况,因为 C++ 中不允许在多个
// 外部变量
extern int testI;
extern string testStr;
// 外部函数
extern void test(int i);
// 编译报错: "int testI" (? testI@@3HA) 已经在 Lesson12_变量的存储类型_extern变量.obj 中定义
// Lesson12_变量的存储类型_extern变量
12.2 知识点代码
Lesson12_变量的存储类型_extern变量.cpp
#include <iostream>
using namespace std;
//外部变量
extern int testI;
extern string testStr;
//外部函数
extern void test(int i);
//int testI;//编译报错 "int testI" (? testI@@3HA) 已经在 Lesson12_变量的存储类型_extern变量.obj 中定义 Lesson12_变量的存储类型_extern变量
int main()
{
std::cout << "变量的存储类型_extern变量\n";
#pragma region 知识点一 extern变量
//外部变量
//作用:
// extern允许在不同文件间共享全局变量和函数
// 当我们在一个源文件中定义了全局变量或函数时
// 可以通过extern关键字在其他文件中使用定义好的内容
//生命周期:
// extern 变量的生命周期是整个程序运行期,因为它通常用于全局变量或全局函数
//优点:
// 方便管理全局数据,支持跨文件使用相同的全局变量
//缺点:
// 全局变量过多会导致程序设计变得复杂,容易引入错误
// 如果不慎使用,可能导致多个文件对全局变量的修改难以追踪,增加调试和维护的难度
//注意:
// 只对确实需要跨文件使用的全局内容使用extern
//举例说明:
cout << testI << endl;//10
cout << testStr << endl;//123
test(101); //Test101
#pragma endregion
#pragma region 知识点二 使用外部变量时的注意点
//1.当多个文件中有重名的全局变量
// 不会出现这种情况,因为C++中是不允许在多个cpp文件中定义同名全局变量的 会直接报错
//2.同一作用域定义同名变量
// 不会出现这种情况,因为C++中是不允许在多个cpp文件中定义同名全局变量的 会直接报错
#pragma endregion
}
Test.cpp
#include <iostream>
using namespace std;
int testI = 10;
string testStr = "123";
void test(int i)
{
cout << "Test" << i << endl;
}
Test2.cpp
//int testI = 10;
12.3 练习题
extern主要用来修饰什么?作用是什么
修饰外部函数和外部变量,作用是可以在代码中使用另一给文件中声明好的全局内容
C++是否允许在不同文件中声明同名全局变量?
不允许
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com