Chinaunix

标题: 问个一直都很混淆的问题。声明和定义究竟如何区别 [打印本页]

作者: Arghawk    时间: 2005-11-05 21:58
标题: 问个一直都很混淆的问题。声明和定义究竟如何区别
K&R上面说int i = 0;这种是带初始化的声明。
偶好像又记得在哪儿见过说带初始化的都是定义。
究竟声明和定义该怎么区别了?
作者: converse    时间: 2005-11-05 22:07
声明:有一个人
定义:这个人长什么样~~
作者: sttty    时间: 2005-11-05 22:09
声明可以有很多,但是定义只有一个.
作者: hotness28    时间: 2005-11-05 22:40
声明是指什么声明呢?函数声明,还是变量声明?
在你举的这个例子int i=0;
这个可以理解为"定义"一个变量的时候进行了"初始化";
而你的理解好象是"声明"一个变量的时候进行了"定义";

声明和定义的概念用在"函数的声明和定义"比较好些.
作者: whyglinux    时间: 2005-11-06 03:13
现在的C/C++标准都规定:在程序中使用一个实体名字之前,必须首先要给出这个名字作何解释及其属性,这就是声明。

定义本身起声明的作用,是声明的一种特殊情况:除了给出名字的解释以及属性之外,还给出其具体实现:对于常量来说,要指定其表示的值;对于变量来说,要为它代表的对象分配相应的内存空间;对于函数来说,要给出其函数体;对于自定义类型来说,要规定其成员构成,等等。

根据C/C++标准的规定,所有的定义都是声明,但声明不一定就是定义。因此,声明比定义有着更广的范畴,定义只是声明的一个“子集”。把声明和定义对立起来的做法与标准不符。

int i=0; 是定义变量 i 的实现并对其进行初始化,是一种定义;既然是定义当然也是声明。因此说它是“带初始化的声明”是可以的。初始化是建立在已知其具体实现的基础之上的,否则无从进行初始化,因此“带初始化的声明”必然又是定义。

声明仅仅表明了一个实体名字的存在性,而定义则强调的是这个名字的具体实现性。因此,如果只强调名字的存在性而不涉及其实现的话,即使是一个定义人们也经常只是笼统地称之为声明。

[ 本帖最后由 whyglinux 于 2005-11-6 03:14 编辑 ]
作者: gooderfeng    时间: 2005-11-06 10:11
个人的理解肯定不一样,别太较真了。其实怎么理解对你都不会有什么大影响
作者: james_lover    时间: 2005-11-06 14:39
声名是让编译器知道,定义是让机器知道。
作者: zalem    时间: 2005-11-06 15:18
如果没有赋值的话,在分割编译下变量的声明和定义确实不怎么好区分,是声明还是定义很多时候要在链接时才能确定,但是只要是有初始化的,当然就是定义。
作者: erduo100    时间: 2005-11-06 15:28
声明不分配内存空间
定义要分配内存空间
作者: mik    时间: 2005-11-06 17:35
原帖由 james_lover 于 2005-11-6 14:39 发表
声名是让编译器知道,定义是让机器知道。



此话怎讲???
作者: sttty    时间: 2005-11-06 18:08
mik: james_lover   的意思可能就是erduo100 所说的。  I  think.
作者: sickcat2004    时间: 2005-11-06 21:40
原帖由 Arghawk 于 2005-11-5 21:58 发表
K&R上面说int i = 0;这种是带初始化的声明。
偶好像又记得在哪儿见过说带初始化的都是定义。
究竟声明和定义该怎么区别了?

申明:你是男人
定义:你可以泡mm
作者: kernelxu    时间: 2005-11-06 21:48
Agree with "whyglinux "
More about definition and declariation,there are some links:

http://blog.chinaunix.net/articl ... 040&blogId=5727


and

http://www-ccs.ucsd.edu/c/declare.html

[ 本帖最后由 kernelxu 于 2005-11-6 21:50 编辑 ]
作者: erduo100    时间: 2005-11-06 21:50
哈哈
sickcat2004 的比喻好经典
作者: 0521    时间: 2005-11-07 11:25
原帖由 erduo100 于 2005-11-6 15:28 发表
声明不分配内存空间
定义要分配内存空间


这才是本质




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2