免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tanoak
打印 上一主题 下一主题

sizeof究竟是怎样实现的? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-06-10 13:43 |只看该作者

sizeof究竟是怎样实现的?

第一: 标准C是肯定不支持
第二: C++什么C99标准不太清楚, 但不是所有的C++编译器都支持这个标准,起码VC就不支持

所以,象这样的东西,有条件性限制的,最好给个说明,否则还是容易误导

论坛徽章:
0
22 [报告]
发表于 2005-06-10 13:45 |只看该作者

sizeof究竟是怎样实现的?

to virmin,

对不起。我一直用linux gcc. 不知道 VC 怎样。如果舞蹈了,请原谅。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
23 [报告]
发表于 2005-06-10 13:47 |只看该作者

sizeof究竟是怎样实现的?

原帖由 "virmin" 发表:
第一: 标准C是肯定不支持
第二: C++什么C99标准不太清楚, 但不是所有的C++编译器都支持这个标准,起码VC就不支持

所以,象这样的东西,有条件性限制的,最好给个说明,否则还是容易误导


啥叫标准C?

C99标准不是标准C?

论坛徽章:
0
24 [报告]
发表于 2005-06-10 13:51 |只看该作者

sizeof究竟是怎样实现的?

...
投降!

论坛徽章:
0
25 [报告]
发表于 2005-06-10 14:13 |只看该作者

sizeof究竟是怎样实现的?

查了一下C99标准, 真不知道该说什么...
而且发现自己使用的两台aix机器, 有一台的编译器较新是支持这个标准的
写了
int n;
char str[n];
....
编译也通过, 寒...

论坛徽章:
0
26 [报告]
发表于 2005-06-10 20:27 |只看该作者

sizeof究竟是怎样实现的?

提到C语言的历史,就必须提UNIX,也就必须提AT&T贝尔实验室的三位杰出青年:Ken Thompson、Dennis Ritchie和Brian Kernighan。

1966年,23岁的Thompson大学毕业后加入了贝尔实验室。3年后Thompson用汇编设计出一个操作系统,取名UNIX。第二年,Thompson又根据BCPL语言设计出无类型的B语言。无类型的意思相当于说B语言中只有int类型,而没有long、float等其它类型,前面提到的GEL就是无类型语言。

1972年,Thompson好友Ritchie在B语言的基础上发明了有类型的C语言(最初称为new B语言)。C语言的主要目就是用来编写UNIX操作系统,也因此,多年来,运行在UNIX操作系统的C语言一直是公认的标准。因C语言脱胎于无类型的B语言,C语言是弱类型语言——不进行强类型检查,此后的标准C逐渐加强了类型检查。

1973年,Thompson重新用C语言改写了UNIX操作系统,成功突破操作系统必须用汇编语言的禁区,用C语言编写的操作系统在移植性和代码效率方面做到了最好的平衡。UNIX操作系统上使用的二进制可执行文件格式就是COFF格式。后来微软崛起时,吸纳了大量UNIX程序员,新的二进制可执行文件格式PE就建立在COFF基础上,这已经是后话。

1978年,由Kernighan和Ritchie合著了著名的“The C Programming Language”一书,简称为《K&R C》。这本书受到了广泛的赞誉,被誉为C语言的圣经,其二人也因此而名声大振。这时期各种版本的C语言都以此作蓝本,K&R C成了事实上的标准。CCS的编译器就支持K&R C。经典又俏皮的入门例子“hello word”即源于此书,笔者在写本书第二章时还专门查询了原书的写法。

1983年夏天,美国国家标准化组织(ANSI)成立了C 语言工作小组X3J11,开始了C语言的标准化。标准化工作费时六年,冗长又拖拉:既要考虑兼容事实标准K&R C,又有各方利益在此角斗,比如,微软希望把自己编译器上的关键字far、near等加入到标准中,微软背后倚持的是:PC上的C语言用户当时已是多数。直到1989年冬天,才正式出台了通常称之为ANSI C的标准,常简称为:标准C或C89。紧接着,更权威的国际标准化组织(ISO)做了些页面调整的小改动后,接纳了ANSI C。随后,1990年初,ANSI又重新采纳了ISO标准。至此C语言的世界标准和美国标准合二为一。

1983年还有一件值得一提的事,Thompson与Ritchie同获计算机界的最高奖——图灵奖

至此业界的C编译器都开始向标准C靠拢或兼容。标准C的地位确定下来,但仍有一些改进。

1995年,ISO对C语言标准做了第一次修订,主要添加了一些函数库。1999年,ISO添加了一些新特性,如变长数组(即数组长度可动态变更)等;也废除了一些非常不好的特性,如外部函数不显式声明就直接引用(主要是为了加强类型检查)等,这个版本被称为C99。但C99显然没有获得C89那样的成功,直到今天,也很少有编译器支持。很大的原因是:能引领风潮的PC机的C用户,大都已经投入C++怀抱。现今真正使用C的领域大都是嵌入式开发、驱动和系统内核等,这些用户显然对运行效率非常敏感,而实现C99的新特性(如变长数组)意味着运行效率降低。

考虑到人类喜欢知道事情最终结果的天性,也为了对人物叙述有始有终,所以简述贝尔实验室的三位杰出人物近况如下:

Thompson:1998年与Ritchie同获国家技术奖。2000年,从贝尔实验室退休,时年59岁。

Ritchie:现仍在贝尔实验室,计算科学研发中心系统软件部经理,专注于操作系统、语言、硬件等。

Kernighan:2000年,从贝尔实验室退休。如今受聘于普林斯顿大学计算机科学系。

C易学,却随着经验的增长而经久耐用。”——Kernighan

论坛徽章:
0
27 [报告]
发表于 2005-06-10 20:35 |只看该作者

sizeof究竟是怎样实现的?

原帖由 "aero" 发表:


啥叫标准C?

C99标准不是标准C?

狭义上标准C应该指ANSI C吧,以前也没去弄个究竟,只知道ANSI C,连C89也不知道...sigh..
不过C99好象没彻底取代C89的地位,
做C做了这么久,居然还有这么个标准不知道...

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
28 [报告]
发表于 2005-06-10 20:39 |只看该作者

sizeof究竟是怎样实现的?

首先 佩服virmin 的执着的精神.
其次 感谢你又给大家找到这么好的资料去读.

论坛徽章:
0
29 [报告]
发表于 2005-06-10 21:05 |只看该作者

sizeof究竟是怎样实现的?

原帖由 "kernelxu" 发表:


sizeof()是运算符,不是函数。


书中强调过.
sizeof()运算符

论坛徽章:
0
30 [报告]
发表于 2005-06-11 21:12 |只看该作者

sizeof究竟是怎样实现的?

typedef struct
{
     char c[2];
} TYPE_T;

sizeof (TYPE_T) = ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP