不同于Java与C#, C++的变量与函数不一定存在于类中. 在C++中, 定义于函数外的变量称为外部变量, 函数内的变量称为局部变量, 也叫自动变量. 外部变量只能被定义一次, 而且在函数内对外部变量的引用必须进行声明, 可用extern语句进行显示声明, 也可以上下文隐式声明, 假如在函数内定义了与外部变量名称相同的变量, 则不会使用外部变量, 而是以当前定义变量使用.
如图
在main函数外定义了一个int型变量i并初始化为1, 在main函数内也定义了一个int型变量i并初始化为2, 此时在main函数中对i进行输出, 则不会使用外部变量i, 而是使用main函数内的变量i.
输出结果如图
那么此时如果我们需在main函数中使用外部变量i, 则需在main函数中用extern显示声明, 如图
注意, 在这条语句中不可再对i进行赋值, 例如
会被编译器提示不可对外部变量的局部声明进行初始化, 当然, 可以在其他语句中再对i进行赋值, 如图
外部变量的作用域范围为全局范围, 也就是说, 在其他文件中定义的外部变量在当前文件也是可以使用的, 且会因为命名而发生冲突, 但是需要在使用外部变量的时候对其用extern声明.由于外部变量的作用域特性, 导致其定义位置是无关的, 也就是说, 无论外部变量i定义在main函数后还是前, 在main函数中都可以以extern语句进行引用.