【C++注意事项】2 变量声明和定义

不可能将所有的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)语言。程序越复杂,静态类型坚持越有助于发现问题。然后,前提是编译器必须知道每一个实体对象的类型,这就要求我们在使用某个变量之前必须声明其类型。



感谢您的访问,希望对您有所帮助。 欢迎大家关注、收藏以及评论。

我的更多博客文章:NoMasp博客导读


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


posted @ 2015-05-20 20:59  nomasp  阅读(247)  评论(0编辑  收藏  举报