免费注册 查看新帖 |

Chinaunix

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

如何才算是精通c语言 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-02-26 18:43 |只看该作者
原帖由 flw 于 2006-2-26 09:19 发表
其实,C 程序员有相当一部分,是从一开始学语言就接触 C 的,
因此初级 C 程序员中,有相当一部分只学过 C。
我建议,当有了 2、3 年的经验之后,不妨去了解一下其它的语言。
因为当时间久了,你就会觉得有些事 ...


太偏薄了,C目前最大的领域在于嵌入式,不能不提的,C++采用C的编译器,同一款编辑器编出的代码,C++大概只有C的30%效率, JAVA更低,因为他是类型安全的语言,采用的检查机制非常烦琐,同时GC也在一定程度上影响了执行效率;
这里举个具体的例子: 前几年很火的MFC, 虽然是C++架构,但是其中却有无数的宏,在<VC技术内幕>这本书中,作者揭示了这个奥秘: 采用MFC框架如果完全采用继承的方法,速度是不可接受的,MS想到的办法就是采用宏来提高效率.
而至于目前JAVA所采用的机制(注意是目前),在10年前我想大概只有单进程操作系统能跑起他的程序来.
当然,这个问题解决,过程也并不神奇, 这必须感谢摩尔定律, 不过在你以JAVA, C++这些语言为荣的时候,是否也能思索下:同样功能的代码,为什么C实现起来效率会高那么多呢. 摩尔定理所带来的效率的提高,难道仅仅是为了让我们开发程序不再那么辛苦和易错吗?

你之前说的很对, 人在编写代码的时候,不可避免的会犯错, 采用高级语言,如JAVA, C#这样类型安全的语言,从机制上保证了你不会犯某些错误.但是这些错误并非神奇的仅仅为JAVA 或C#这些语言所解决了,其实设计者只是将这些工作交给了你的CPU;更糟糕的是这些问题的解决完全取决于语言的设计者, 他们面对纷繁复杂的用户却只能采用通用的解决方案, 这种缺乏目的性和可变性的手段,从更深的角度来说是束缚了开发者,同时对效率造成了伤害.

高级语言的产生, 并非诞生自技术,而是诞生自市场, 和他状况类似的还有"软件工程"这门学科. 高级语言最大的用处就是减轻了开发者的负担. 比如OOP, 观点很好,但是我们的CPU是OOP的吗?他难道不是一条条指令执行下来的吗?我认为,一台机器, 他如果所运行的程序采用了OOP的思想 就意味着他效率的降低.

作者在这里似乎也挺看不起ASM, 而我却觉得, 如果真想在技术上有一定的深度,ASM一定要学.原因:你的寄存器变量的值不会对你撒谎;而你的GC,我想你不能保证,JAVA GC的设计者也不敢保证.

很多人都很喜欢技术这个词, 但是我认为很不幸的是, 所谓的高级语言的技术,并非应该归于计算机技术.

BTW: 我中间对OOP的一些看法并非要贬低他, 而仅为证明"高级语言的产生, 并非诞生自技术,而是诞生自市场"这个观点的. 软件人才的匮乏是市场问题, 所以我们不得不将部分摩尔定律的效率成果消费掉来解决这个问题. OOP自然也是技术,但是他的诞生为市场而生的, 他和纯粹的计算机技术并不能等同, 我倒觉得他更应该归为"软件工程"领域的技术, 因为他提高的是程序开发的效率而非运行效率.

论坛徽章:
0
32 [报告]
发表于 2006-02-26 18:52 |只看该作者
原帖由 pluno 于 2006-2-26 18:43 发表


太偏薄了,C目前最大的领域在于嵌入式,不能不提的,C++采用C的编译器,同一款编辑器编出的代码,C++大概只有C的30%效率, JAVA更低,因为他是类型安全的语言,采用的检查机制非常烦琐,同时GC也在一定程度上影响了执行 ...


写了这么多,觉得很乱,其实就一句话:如果你真想做技术,请正确认识高级语言,我的排名和前面那位正好相反,做技术的人,ASM应该排第一,C排第二,至于C++,JAVA,C#,我不反对你为混口饭去学他,但不要将他们和你的计算机技术的水平挂钩. 他们的主要作用是引导你成为一个熟练的蓝领开发者,而你若真是技术的爱好者,请重视起C来!

论坛徽章:
0
33 [报告]
发表于 2006-02-26 19:41 |只看该作者
原帖由 pluno 于 2006-2-26 18:52 发表


写了这么多,觉得很乱,其实就一句话:如果你真想做技术,请正确认识高级语言,我的排名和前面那位正好相反,做技术的人,ASM应该排第一,C排第二,至于C++,JAVA,C#,我不反对你为混口饭去学他,但不要将他们和你的计算机 ...

呵呵。C版的斑竹会不懂C么?

论坛徽章:
0
34 [报告]
发表于 2006-02-27 09:06 |只看该作者
pluno说的都没错,可是还是跟flw说的南辕北辙了...嘿嘿

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
35 [报告]
发表于 2006-02-27 09:38 |只看该作者
<<< C++采用C的编译器,同一款编辑器编出的代码,C++大概只有C的30%效率

我说四点,
第一,C 和 C++ 孰优孰劣和“编辑器”无关。
第二,你这句 “C++ 的效率是 C 的效率的 30%” 千万不要让搞 C++ 的人听到。
第三,蓝色的部分含义不明,不知所云.
第四,我不懂 Java,也不敢说懂 C++,因此,你的箭放偏了。

[ 本帖最后由 flw 于 2006-2-27 09:41 编辑 ]

论坛徽章:
0
36 [报告]
发表于 2006-02-27 09:49 |只看该作者
原帖由 flw 于 2006-2-27 09:38 发表
<<< C++采用C的编译器,同一款编辑器编出的代码,C++大概只有C的30%效率

我说四点,
第一,C 和 C++ 孰优孰劣和“编辑器”无关。
第二,你这句 “C++ 的效率 ...


我喜欢看老大何人吵这种架, 巨爽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
37 [报告]
发表于 2006-02-27 10:03 |只看该作者
原帖由 albcamus 于 2006-2-27 09:49 发表


我喜欢看老大何人吵这种架, 巨爽


主要他们打字都很多.

论坛徽章:
0
38 [报告]
发表于 2006-02-27 11:48 |只看该作者
让我怀念起了以前在老罗的网站上看牛人们的口水贴,涨见识~

 我这属不属于起哄?

论坛徽章:
0
39 [报告]
发表于 2006-02-27 12:04 |只看该作者
原帖由 jako 于 2006-2-23 13:55 发表
去看看linux的内核代码你就知道什么是C语言了!

这话我也曾今对人津津乐道,但现在想起来,纯粹为学C而去看内核是很没有效率的。

1:linux内核是用GNU C写的,跟标准C还是有一定差距的,比如分支预测,内嵌汇编并不为ISO C兼容。而且linux内核的API跟用户态的API是有很大差距的,对于要做用户态程序开发的人来说,熟悉这些API没太大的用处。所以看linux内核既不能熟悉标准C,也不能熟悉C库。
2:有人会说linux内核中有很多很优秀的算法值得学习。不错,linux内核中确实有很多好的算法,就像我前面提到的进程调度的O(1)算法和内存管理的buddy算法。但是刚看内核的人都会有这个感觉,自己面对的是一个完全陌生的领域。完全陌生的数据结构和函数。除非对这些数据结构和函数比较熟悉,否则是很难理解这些算法的。而且linux内核中会加入很多不同体系结构和SMP的代码,这对不了解这些的人带来了理解上的麻烦。
3:有人说看内核要学习它的设计思想。如果把分析内核作为业余的一项爱好来作,那么没有一两年的时间是不可能熟悉内核的。在熟悉内核之前是无法很好理解它的设计的。如果为学习一种设计思想而花这么长时间的准备是很没有效率的。

所以我觉得阅读linux内核并不适合拿来作为学C的方法。

当然,linux内核之所以会吸引那么多的kernel hacker是有其原因的。linux有非常好的编程风格,设计思想。就像看一本好书能够陶冶情操,浏览优秀的代码可以提高编程的素养。而且阅读linux内核代码对做底层开发的人很有帮助。

小弟愚见,请各位大牛矫枉过正。

[ 本帖最后由 richardhesidu 于 2006-2-27 12:08 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
40 [报告]
发表于 2006-02-27 12:09 |只看该作者
学习内核,可以做为提高C语言的方法.^_^
内核代码中有很多非常好的技巧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP