码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-20 22:23:49      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:声明   编译   变量声明   c++   机制   

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

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

标签:声明   编译   变量声明   c++   机制   

原文地址:http://blog.csdn.net/nomasp/article/details/45875341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!