一、分离式编译机制
- C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译
- extern主要就被用于部不同文件之间共享代码(共享变量)
二、变量的声明和定义
-
变量的声明
-
使程序知道有这个变量,规定了变量的类型和名字,不关联实体、不分配存储空间
-
一个文件如果想要使用别处定义的变量,则必须包含那个变量的声明
-
// 假设 bFlag 在其他的文件中被定义 extern bool bFlag;
-
-
变量的定义
-
使程序知道有这个变量,规定了类型和名称,并且分配存储空间
-
// 1.直接定义 bool bFlag = true; // 2.extern 后再定义 extern bool bFlag = true;
-
三、注意
- 变量只能被定义一次,但是可以被声明多次
- 变量的定义必须出现且只能出现在一个文件中,其他用到该变量的文件必须对其进行声明,使用extern关键字
//person.hpp 文件中
#pragma once
#include <string>
#include <iostream>
using namespace std;
class Person
{
public:
Person(string name,int age) {
this->m_Name = name;
this->m_Age = age;
cout << "Person的构造函数调用" << endl;
}
~Person() {
cout << "Person的析构函数调用" << endl;
}
string m_Name;
int m_Age;
};
extern Person p1("dzc", 23);// 定义一个全局变量,这个位置的extern不加也可以,这句话的本质就是定义
- 在另一个文件中使用
// main.cpp文件
#include <iostream>
#include "Person.hpp"
#include <cstdlib>
extern Person p1; // 这里表示使用 全局变量p1 这里的本质是声明,extern也好理解,英语本意就是外来的,外部的
// 然后就可以在本文件中使用了,如下所示
int main() {
cout << "正在执行main..." << endl;
cout << p1.m_Name << endl;
cout << p1.m_Age << endl;
return 0;
}
结果如下: