免费注册 查看新帖 |

Chinaunix

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

[C] 【新人】K&R书中的不解之处 [复制链接]

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
21 [报告]
发表于 2013-07-22 08:42 |只看该作者
围观大神级辩论,哈哈

论坛徽章:
3
白羊座
日期:2013-11-05 12:59:14子鼠
日期:2014-01-29 14:14:50戌狗
日期:2014-02-11 16:21:45
22 [报告]
发表于 2013-07-22 11:06 |只看该作者
回复 20# pmerofc


    pm兄说得也不无道理,《C和指针》对于编程白丁来说也许门槛略微高了那么一点。不过这本书真正区别于其他C教程的价值是在后半本,我强烈建议所有对指针感觉懵懂的C程序员把这后半本书的练习都做一遍,绝对有帮助!

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
23 [报告]
发表于 2013-07-22 11:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
24 [报告]
发表于 2013-07-24 00:11 |只看该作者
Ager 发表于 2013-07-18 19:23
这句话出自K&R TCPL 2/e的第211页(英文原版),即在附录A8当中。原文是这样的:

翻译成所谓“static类型”完全是不负责任的胡扯。

不过这里还有个有趣的问题。
注意传统的C有存储类(storage class)的概念。变量和函数具有存储类。存储类具有两个方面的含义:变量或函数对应的符号的可见性(visibility),以及如何被存储。
ANSI C使用更精确的两个概念:存储期(storage duration)和链接(linkage)取代了这个概念。其中存储期只适用于对象,用于明确对象的生存期;而链接适用于标识符,用于明确不同翻译单元中相同标识符是否指称同一实体——注意不仅仅限于对象或函数的。
被声明为static的对象具有静态存储期(static storage duration)。而链接只分为外部链接(external linkage)、内部链接(internal linkage)和无链接(no linkage),不具有“静态链接”的说法。(至于static linking是实现上的另一回事。)也就是说,如果明确是存储期,那么“静态”只适合于对象,不适合于函数。
但是关键字static的含义大体上没有改变(仍然可用于函数,虽然对函数来说只是影响函数名的链接),和extern等其它一些关键字一起被称为storage-class specifier,仍然存在于现在的ISO C中——尽管extern只影响链接。
所以原书第一版的时候用static,解释为static class来说其实是说得通的(甚至可以说应当作为关键字),虽然static class这个概念理解起来比较麻烦。但是现在有了更精确的描述,这样的说法就是不准确的了,作为关键字容易引起误会。(不过奇怪为什么这里没有改掉。)

论坛徽章:
0
25 [报告]
发表于 2013-07-24 00:19 |只看该作者
附:1975年版的C Reference Manual里就可以看到早期C的没有对于对象而言正交的存储期和链接的概念,存储类直接用于标识符(这里的标识符显然只能解释为对象/函数的):

4. What’s in a Name?
C bases the interpretation of an identifier upon two attributes of the identifier: its storage class and its type. The
storage class determines the location and lifetime of the storage associated with an identifier; the type determines the
meaning of the values found in the identifier’s storage.
There are four declarable storage classes: automatic, static, external, and register. Automatic variables are local to
each invocation of a function, and are discarded on return; static variables are local to a function, but retain their values
independently of invocations of the function; external variables are independent of any function. Register variables
are stored in the fast registers of the machine; like automatic variables they are local to each function and disappear
on return.

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
26 [报告]
发表于 2013-07-24 04:41 |只看该作者
幻の上帝 发表于 2013-07-24 00:11
不过这里还有个有趣的问题。


赞 ——!

大牛你要经常来呀,哈哈 {:3_193:}

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
27 [报告]
发表于 2013-07-25 11:43 |只看该作者
辛苦LS几位了,学习了!1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP