免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6330 | 回复: 14
打印 上一主题 下一主题

问个一直都很混淆的问题。声明和定义究竟如何区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-05 21:58 |只看该作者 |倒序浏览
K&R上面说int i = 0;这种是带初始化的声明。
偶好像又记得在哪儿见过说带初始化的都是定义。
究竟声明和定义该怎么区别了?

论坛徽章:
0
2 [报告]
发表于 2005-11-05 22:07 |只看该作者
声明:有一个人
定义:这个人长什么样~~

论坛徽章:
0
3 [报告]
发表于 2005-11-05 22:09 |只看该作者
声明可以有很多,但是定义只有一个.

论坛徽章:
0
4 [报告]
发表于 2005-11-05 22:40 |只看该作者
声明是指什么声明呢?函数声明,还是变量声明?
在你举的这个例子int i=0;
这个可以理解为"定义"一个变量的时候进行了"初始化";
而你的理解好象是"声明"一个变量的时候进行了"定义";

声明和定义的概念用在"函数的声明和定义"比较好些.

论坛徽章:
0
5 [报告]
发表于 2005-11-06 03:13 |只看该作者
现在的C/C++标准都规定:在程序中使用一个实体名字之前,必须首先要给出这个名字作何解释及其属性,这就是声明。

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

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

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

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

[ 本帖最后由 whyglinux 于 2005-11-6 03:14 编辑 ]

评分

参与人数 1可用积分 +5 收起 理由
flw + 5 精品文章

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2005-11-06 10:11 |只看该作者
个人的理解肯定不一样,别太较真了。其实怎么理解对你都不会有什么大影响

论坛徽章:
0
7 [报告]
发表于 2005-11-06 14:39 |只看该作者
声名是让编译器知道,定义是让机器知道。

论坛徽章:
0
8 [报告]
发表于 2005-11-06 15:18 |只看该作者
如果没有赋值的话,在分割编译下变量的声明和定义确实不怎么好区分,是声明还是定义很多时候要在链接时才能确定,但是只要是有初始化的,当然就是定义。

论坛徽章:
0
9 [报告]
发表于 2005-11-06 15:28 |只看该作者
声明不分配内存空间
定义要分配内存空间

论坛徽章:
0
10 [报告]
发表于 2005-11-06 17:35 |只看该作者
原帖由 james_lover 于 2005-11-6 14:39 发表
声名是让编译器知道,定义是让机器知道。



此话怎讲???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP