C++程序通常由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义。
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过extern关键字声明变量而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern:
extern int i; // declares butdoes not define i
int i; // declares and defines i
extern声明不是定义,也不分配存储空间。事实上,它只是说明变量在程序的其他地方。程序中变量可以声明多次,但只能定义一次。
如果声明有初始化式,那么声明可以被当作是定义,即使声明标记为extern:
extern double pi=3.14;//definition
double pi; //error, redefinition of pi
任何在多个文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件包含该变量的声明。
具体使用方法:
//file1.cpp
#include <iostream>
using namespace std;
extern int i; //这是一个声明,告诉编译器变量i的定义有可能是在其他源文件中,即使本文件中没有i的定义,你也不要报错。
void main()
{
extern int i; //同样是对i的声明,作用与上面的声明完全一样,说明声明可以存在多个,实际上这两个声明只要任意一个就可以了。但是两个声明语句如果一个都没有,编译器就会认为变量i没有定义,会报错。
i=0; //赋值语句,给变量i一个新值,变量赋值前必须要已经定义了,如果不存在file2文件中的定义语句,虽然不会出现编译错误,但是链接会有错。
cout<<i;
}
//file2.cpp
int i;//首先是一个定义,而且是一个没有初始化的定义(不过实际上全局变量i被默认初始化为0),变量i被定义在file2源文件中
C++声明和定义
最新推荐文章于 2024-03-14 21:44:17 发布