不可能将所有的C++程序放到一个文件中咯,因此C++就支持了分离式编译(separate compilation)机制,它允许将程序分为若干个文件,每个文件可被独立编译。这样说明了,当你的程序有很多文件时,修改其中一个文件后不需要将所有文件都重新编译一遍,只需要编译修改过的就好,然后将它们都链接起来。
C++是如何支持分离式编译的呢?通过将声明和定义分离开来。
声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含该名字的声明。
定义(definition)负责创建与名字关联的实体。
一个声明语句由一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。
定义还需要申请存储空间,也可能会为变量赋一个初始值。
如果想声明一个变量而非定义它,就在变量名前添加关键字extern关键字标记的变量赋一个 初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而变成了定义。
extern int i; // 声明i而非定义i
int j; // 声明并定义j
在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
// 错误
int main()
{
extern int i;
int i=10;
return 0;
}
变量能且只能被定义一次,但是可以被多次声明。
// 这样是可以得
extern int i;
extern int i;
extern int i;
int main()
{
int i=10;
return 0;
}
如果要在多个文件中使用同一个变量,就必须将声明和定义分离。但是此时变量的定义就必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝对不能重复定义。
另外C++还会在编译阶段进行类型检查(type checking),所以也称C++是一种静态类型(statically typed)语言。程序越复杂,静态类型坚持越有助于发现问题。然后,前提是编译器必须知道每一个实体对象的类型,这就要求我们在使用某个变量之前必须声明其类型。
原文地址:http://blog.csdn.net/nomasp/article/details/45875341