声明和定义的区别

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

在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如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声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。

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

时间: 2024-12-28 14:02:57

声明和定义的区别的相关文章

C++ 变量的声明与定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义

第2章 变量和基本类型 附2 --声明和定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间.----定义 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的.-----声明 前者是“定义性声明(defining declara

函数的声明和定义的区别

函数声明和定义的区别(1) C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别.正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次. 函数声明由函数返回类型.函数名和形参列表组成.形参列表必须包括形参类型,但是不必对形参命名.这三个元素被称为函数原型,函数原型描述了函数的接口.定义函数的程序员提供函数原型,使用函数的程序员就只需要对函

C语言中的声明与定义的区别

1.对于下面的声明语句 int a; 如果其位置出现在所有的函数体之外,那么它就被称为外部对象a的定义.这个语句说明了a是一个外部整型变量,同时为a分配了存储空间.因为外部对象a并没有被明确指定任何初始值,所以它的初始值默认为0(某些系统中的连接器对以其他语言编写的程序并不保证这一点,C编译器有责任以适当方式通知连接器,确保未指定初始值的外部变量初始化为0). 2.又如下面的声明语句: int a = 7; 在定义a的同时也为a明确指定了初始值.这个语句不仅为a分配内存,而且也说明了在该内存中应

声明与定义的区别

声明与定义的区别 声明是向编译器介绍名字--标识符.它告诉编译器"这个函数或变量在某处可找到,它的模样象什么".而定义是说:"在这里建立变量"或"在这里建立函数".它为名字分配存储空间.无论定义的是函数还是变量,编译器都要为它们在定义点分配存储空间.对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码最终也要占用一定的内存. 在C和C++中,可以在不同的地方声明相同的变量和函数,但只能有一个定义(

变量声明和定义的区别

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义(definition

【非原】c语言之声明和定义的区别

原创地址:http://www.cnblogs.com/haore147/p/3647466.html 什么是定义?什么是声明?它们有何区别? 举个例子: 1 2 A)int i; B)extern int i;(关于extern,后面解释) 哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎没有一人能回答上这个问题.这个十分重要的概念在大学里从来没有被提起过! 什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说

变量声明与定义的区别

本质区别在于是否分配内存.int a; 在声明的时候就已经建立了存储空间,所以既是声明又是定义extern int a; a是在别的文件中定义的,所以这里仅是声明类中的变量只是声明而不是定义,只有在实例化以后才会分配内存.EnclosingClass jb; //声明jb = new EnclosingClass(); //定义

浅谈声明与定义的区别

以下代码使用平台是VS2012. 清楚明白声明与定义是一名合格的程序猿的基本要求. 本人认为,C++编码过程中谈及"声明"和"定义"是因为我们要使用一个变量.类型(类.结构体.枚举.共用体)或者函数,因此有申明和定义变量.类型和函数之说.C/C++中,使用一个变量.类型或者函数必须先在使用前申明它. 请记住: (1)"声明"与"定义"的本质区别是:声明可以出现多次,而定义只能出现一次. (2)把申明的东西放在头文件,把定义的东