免费注册 查看新帖 |

Chinaunix

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

[C] osc有人也在写C语言书 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2012-10-25 00:28 |只看该作者
回复 40# jackarain


    多谢多谢。这才是帮我。哈。实话。
比整天扯蛋有用多了。我真忙的没时间陪你扯。哈。白天还有很多工作要做。我现在想写代码都没时间写。现在不把自己的C设计经验整理整理,以后可能更没时间了。

论坛徽章:
0
42 [报告]
发表于 2012-10-25 02:34 |只看该作者
中山野鬼 发表于 2012-10-24 17:14
回复 30# supermegaboy

呵呵,有异议才是正常的,有异议的C/C++才是有趣的。

论坛徽章:
0
43 [报告]
发表于 2012-10-25 02:44 |只看该作者
中山野鬼 发表于 2012-10-24 17:31
@supermegaboy 你的所有意见我在OSC上都有回应,如果你有时间,非常希望你能继续给出批评和指正,并大家深入 ...


我觉得还是在这里讨论好吧,毕竟论坛比留言簿提供了更好的格式化工具和环境,相信这点适应力对你来说是小菜一碟。

论坛徽章:
0
44 [报告]
发表于 2012-10-25 03:34 |只看该作者
中山野鬼 发表于 2012-10-24 18:13
@supermegaboy ,关于stdout是什么,我又重新翻阅了一下标准。是否是宏,我的理解出处在Index 部分,675 有如 ...



关于这个问题,我知道国内有些书说它们是个宏,而且在我初学c的头几年我一直都这么认为的,直到我阅读了标准。
我也注意到了index和stdio.h的介绍这两处差异,当时我认为,就文字的定义和描述性质来说,expression那几行字显然属于定义性的描述,但是
index那里写着个macro,这种疑问也是无法忽视的,于是,接下来我参考了一下C的发明人K & R是如何
看待这个问题的,在C语言程序设计英文版第132页K&R写下了下面这段文字:

The file pointers stdin and stdout are objects of type FILE*. They are constants, however,  not variables,  so it is not possible to assign to them.

所有疑问都解决了。


关于你博客中的回复,现在太晚了,明天再说吧。

论坛徽章:
0
45 [报告]
发表于 2012-10-25 09:03 |只看该作者
中山野鬼 发表于 2012-10-25 00:28
回复 40# jackarain


晕,谁陪你扯淡,才没你那么空,整天在那里唧唧歪歪,喷这喷那,看不下去时,我才回几个贴...

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

论坛徽章:
0
47 [报告]
发表于 2012-10-25 21:21 |只看该作者
中山野鬼 发表于 2012-10-24 17:31
@supermegaboy 你的所有意见我在OSC上都有回应,如果你有时间,非常希望你能继续给出批评和指正,并大家深入 ...


你博客上的讨论,偶移到这里了:



(标准的权威性并不是唯标准论,不过多个编译器和平台使用开发后,程序员会理解标准的价值,上来就希望初学者有标准的概念,和习惯到标准上找最终说法,我认为是有必要的,当然实际开发中,标准并不是快速有效的参考资料)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
初衷是好的,但是要考虑到新手的能力,如果一个人到了能阅读标准的程度,早已脱离了新手阶段了。




(我仍然坚持argc ,argv的参数方式,入口参数的详细解释没办法铺开,但C语言,侧重模块式编写,即便是一个程序,其和被调用者之间,总要有对接,保持main 是参数的习惯,对模块设计思想是有利的)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于风格的问题,本来就争论很大,从来没有唯一的、标准的答案,你要坚持你的风格,当然也无可厚非。也正因此,偶的用词是“不同意”,而不是“对或错”。其实关键并不在于用这种风格还是那种风格,而是团队的成员间
在同一个项目中坚持统一的风格。



(标准没有直接定义出变量的这个词,但有这个意思,并非标准本身,而是引诉标准的文献转译,当然此处我的断语行为确实不妥,后续会进行改正,我尽量回避object这个词是因为如果一提对象,会另很多初学者想到了面向对象的对象)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对象概念的混淆并不是严重得非得去回避的问题,解释清楚就行了。相反地,在一本C语言书中,你应该有相当的篇幅去谈论object,特别是在你设定了“对C有深入了解”的目标情况下。object是C语言精髓中的精髓,它是C语言的基石,
C语言中大量精深的原理都以object模型为支撑,可以毫不夸张地说,不懂object,不能称之为懂C;而一本要“对C有深入了解”的书,又怎能不描述object呢?



(这里我有比较多的异议。赞同的地方是,指针的实际宽度是和编译器相关的。至于32位的系统,指针不一定是32位确实有这种可能,但指针的宽度和逻辑寻址的宽度只一致的,因此我有个和你相矛盾的观点,指针的宽度是和系统有关的,而编译器是根据目标系统来确定指针的)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
从“指针的宽度和逻辑寻址的宽度只一致的”这句话中,可以看到这里你有一个误解,把指针与指针的实现等同起来。

在C的对象模型和宿主或独立环境之间,还存在一层抽象:内存模型。这个内存模型是不同执行环境的抽象,就是无论C语言的哪个实现,都必须符合内存模型这个规范,至于不同环境中如何实现这个内存模型,这是编译器的事情了。

对象模型是建立在内存模型之上的,对象的address是内存模型中的address,换言之,这个address是一个抽象语义中的address,C语言的每个实现都必须在自身所处的执行环境中实现这个address,如何实现?有时候是offset address,

有时候是virtual address,当然也有时候是physics address,但是,此address不是彼内存模型中的address,仅是它的实现。由于C/C++是以性能为基础的,性能通常是一个C/C++实现最重要的考虑因素,内存模型中的address会由于不同实现的

不同性能需求以及其它相关客观因素(例如编译器的设计目标)而具有不同的实现,这也是C/C++标准为什么规定指针是实现相关的原因!

因此,指针与其实现之间并不具有一一对应的关系,不要把“指针的宽度”与“逻辑寻址的宽度”等同起来!offset address的宽度仅是一个实现在确定指针二进制宽度时的考虑因素之一,而非必然,编译器的设计者将以自己认为合理的方式作出决定,

它是一个合理性决定,而非必然性决定。



(这里我谈论的是变量的本质,变量是有名的,这个是事实,但不是我要强调的内容,正常变量的定义,空间的申请,都具备名称,但我希望不要让新手认为这就是数学上的一个符号,而是一个实际的存储区域,当然存在空间和时间上的限制)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我认为,正确是前提。把“变量就是存储区”改为“变量具有存储”不是更好么?

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

论坛徽章:
0
49 [报告]
发表于 2012-10-26 00:53 |只看该作者
supermegaboy 发表于 2012-10-25 03:34
关于这个问题,我知道国内有些书说它们是个宏,而且在我初学c的头几年我一直都这么认为的,直到我阅读 ...


非常感谢你的内容。我也确实觉得说"macro"有多余的嫌疑。且不谈对不对,反倒可能会误导新人。当然还是非常希望你能对我的言论提出批评意见。或许大家都没错,但如果我的行文实际给人的理解有错误,那就错大了。这个比不写还差。所以也希望你有空时能给予帮助。大家都认为的对的,或都认为错的,就没有必要讨论了嘛。哈。只要讨论的是实事,我是非常欢迎参与的。无论谁对谁错,找论据的过程本身就是一种再学习。

论坛徽章:
0
50 [报告]
发表于 2012-10-26 09:52 |只看该作者
pmerofc 发表于 2012-10-25 21:56
回复 47# supermegaboy

无错,定位应该在中级。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP