码迷,mamicode.com
首页 > 其他好文 > 详细

声明和定义的区别

时间:2015-02-17 22:24:48      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:声明   定义   c++   

声明部分的作用是对有关的标识符(如变量?函数?结构体?共用体等)的属性进行说明。对于函数,声明和定义的区别是明显的,函数的声明是函数的原型,而函数的定义是函数功能的确立。对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块。

在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如int a;);另一种是不需要建立存储空间的(如extern int a;)。前者称为定义性声明(defining declaration),或简称为定义(definition)。后者称为引用性声明(referenceing declaration)。广义地说,声明包括定义,但并非所有的声明都是定义。对“int a;” 而言,它是定义性声明,既可说是声明,又可说是定义。而对“extern int a;” 而言,它是声明而不是定义。

一般为了叙述方便,把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明。显然这里指的声明是狭义的,即非定义性声明。例如:

<span style="font-size:18px;">int main( )
{
    extern int a; //这是声明不是定义。声明a是一个已定义的外部变量
}
int a;  // 是定义,定义a为整型外部变量</span>

外部变量定义和外部变量声明的含义是不同的。外部变量的定义只能有一次,它的位置在所有函数之外,而同一文件中的外部变量的声明可以有多次,它的位置可以在函数之内,也可以在函数之外。系统根据外部变量的定义分配存储单元。对外部变量的初始化只能在定义时进行,而不能在声明中进行。所谓声明,其作用是向编译系统发出一个信息,声明该变量是一个在后面定义的外部变量,仅仅是为了提前引用该变量而作的声明。extern只用作声明,而不用于定义。

声明:变量的声明做了两件事情

         a.告诉编译器这个变量已经匹配到一块内存上了,下面的代码用到的变量或对象是在别处定义的. 声明可以出现很多次.

         b.告诉编译器这个变量名已经被我占用了,其他的的变量将不能再使用.

定义:告诉编译器创建一个对象,为这个对象分配一块内存并给它取一个名字,这个名字就是常说的.变量名或对象名.同一变量或对象的定义只能出现一次.


例如用static来声明一个变量的作用有二:

对局部变量用static声明,使该变量在本函数调用结束后不释放,整个程序执行期间始终存在,使其存储期为程序的全过程。

全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。


本质区别:声明没有分配内存,而定义则是创建了对象并为这个对象分配了一块内存.


声明和定义的区别

标签:声明   定义   c++   

原文地址:http://blog.csdn.net/zzucsliang/article/details/43868357

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