12.extern变量

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

使用外部变量时的注意点

  1. 当多个文件中有重名的全局变量:

    • 不会出现这种情况,因为 C++ 中不允许在多个 .cpp 文件中定义同名全局变量,会直接报错。
  2. 同一作用域定义同名变量:

    • 不会出现这种情况,因为 C++ 中不允许在多个 .cpp 文件中定义同名全局变量,会直接报错。
// 外部变量
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

×

喜欢就点赞,疼爱就打赏