某文件中全局变量可见性(visibility)的获得:
- (1)#include 对方的头文件
- (2)extern 关键字
在 A.cpp 文件中引用 B.cpp 中的全局变量
B.cpp 中的全局变量是全局可见,但须使用 extern 显示声明。
显然是不可以在 A.cpp 中对 B.cpp 进行直接包含的(#include "b.cpp"
),解决方案是在 A.hpp 文件中使用 extern 关键字,A.hpp 头文件架起了 A.cpp 和 B.cpp 的桥梁。
共如下的三个文件:
- (1)A.hpp
- (2)A.cpp
- (3)B.cpp
// B.cpp
double pi = 3.14159265;
char str[] = "hello";
// A.hpp
extern double pi;
extern char str[];
// A.cpp
#include "A.hpp"
int main(int, char**)
{
cout << pi << ", " << str << endl;
return 0;
};
当然也可简单化处理,直接在 A.cpp 文件中使用 extern 关键字:
// B.cpp
doubel pi = 3.14159265;
char str[] = "hello";
// 只要不是在类等结构中,都属于全局变量
// 要深刻理解C/C++中的全局变量呀
// A.cpp
extern double pi;
extern char str[];
int main(int, char**)
{
cout << pi << ", " << str << endl;
return 0;
};
补充
// B.cpp
int a = 5;
// A.cppp
extern int a = 6;
// 错误
// 这里就不再是声明,而是定义了
// 显然链接时会发生错误,int a; 已在 A.obj 文件中定义