1.外部变量的声明
外部变量作用域为整个文件,可以在main()前或者头文件中进行声明。
一方面,若要使用外部变量必须在使用它的所有文件中进行声明,另一方面,c++中限制了变量的定义只能进行一次,即单定义规则。所以,若要在多个文件中使用同一个外部变量,必须进行以下声明:
//file1.cpp
extern int i=7; //定义外部变量i
int j=8; //定义外部变量j,extern可以省略
main()
{
...
}
//file2.cpp
extern int i ; // 在file2.cpp中,引用file1.cpp中定义的外部变量 i ;
extern int j ; // 在file2.cpp中,引用file1.cpp中定义的外部变量 j ;
...
file1.cpp定义外部变量i,j,使得编译器为他们分配内存空间。但是 在file2.cpp中,用extern指示了程序使用另一个文件(file1.cpp)中定义的的变量i,j,程序并不为它们再分配内存空间。
2.外部变量的引用示例
程序中定义了全局变量warming,并且演示了如何声明、使用它们,另外定义了同名的自动变量。
//Main.cpp
#include <iostream>
using namespace std;
extern double warming=0.1;//定义外部变量
void update(double dt);
void local();
int main()
{
cout<<"Global warming is "<<warming<<" degree.\n";
update(0.1);
cout<<"Global warming is "<<warming<<" degree.\n";
local();
cout<<"Global warming is "<<warming<<" degree.\n";
return 0;
}
//extern.cpp
#include <iostream>
using namespace std;
extern double warming;//引用定义的外部变量warming;
void update(double dt);
void local();
void update(double dt)
{
warming+=dt;
cout<<"Updating Global warming to "<<warming<<" degree.\n";
}
void local()
{
double warming=0.9;
cout<<"Local warming is "<<warming<<" degree.\n";
cout<<"But Global warming to "<<::warming<<" degree.\n";//作用域解析运算符
}
输出结果:
注意:c++提供了作用域解析运算符(::),放在变量名之前,该运算符表示使用变量的全局版本。