免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 73536 | 回复: 267

[C++] 过来人谈程序设计,如何选择C或者C++?!(获奖名单已公布-2012-8-29) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2012-06-28 10:52 |显示全部楼层

获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-3768094-1-1.html

活动背景:

最近版面上的路线之争之风很是流行,很多网友已经站出来表示不满,更多的技术用户希望版面能够回归技术细节讨论。
看到版面各位对路线之争的看法也有各种不同看法,现在组织一次大家对于C和C++的讨论活动,希望借此能够在CU论坛的C/C++版上有个清楚的解释,结果不重要。只是为了给后来者一个清晰的解释,自己的路自己选择:)

讨论中,请大家不要恶语相向,人身攻击!违者直接封禁账号!

以后此类路线之争请不要再出现在论坛讨论活动中,如果有想要说的,请直接跟帖在本活动中!

本期特邀嘉宾:
ChinaUnix资深网友:OwnWaterloo
ChinaUnix资深网友:pmerofc

本期话题:

1、您在C和C++之争中支持哪方,为什么?
2、C和C++各自适合的领域是什么,为什么?
3、读完试读章节后有哪些感想?(回答第3题的时候 需要标注图书名称,例如:《C++ Primer Plus(第6版)》+感想

活动要求:

可以针对以上三个话题的任意一个话题讨论,但请一定要说明理由,没有理由的则不被计入合格的跟帖回答中。

活动奖励:

针对以上任意一个问题跟帖回答,我们会在讨论结束后,随机抽选10名网友赠送以下图书中的前3本中其中一本作为奖励,每个品种限3-4册。

奖品简介:


代码设计与重用_副本_副本.jpg
Scott Meyers与francis Glassborow鼎力推荐的著作
出版时间:2012年6月
Imperfect C  _副本_副本.jpg
Amazon五星级畅销书,荣耀、刘未鹏合译
出版时间:2012年6月
C   Priemr Plus_副本_副本.jpg
经久不衰的C++畅销经典教程,第一本支持C++11新标准的程序设计图书,蔡学镛推荐
出版时间:2012年6月

C专家编程_副本.png
出版时间:2008年2月

C陷阱与缺陷_副本.png
出版时间:2008年2月
C和指针_副本.png
出版时间:2008年4月
C  沉思录_副本.png
出版时间:2008年2月


部分图书样章阅读:

《C++ Primer Plus》(第6版)图书样章
http://wenku.it168.com/d_000362757.shtml
《C++代码设计与重用》第4、9章
http://wenku.it168.com/d_000362755.shtml
《Imperfect C++》中文版图书样章
http://wenku.it168.com/d_000362752.shtml

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
发表于 2012-07-02 21:43 |显示全部楼层
首先声明下,下面的观点与我的学习过程和使用环境有关,所以并不具有普适的客观性,仅供参考。同时若与你的观点相悖,还请见谅。

作为非计算机科班出身的开发人员,刚开始并没有对C或C++中的哪一个有特别的喜好。当时很粗浅的观点就是:简单至上(简单的定义有很多种,比如语言的语法简单;逻辑的简单等。这里指的是以最快的速度开发出一个能“看得过去的”程序。‘虽然成本是采用简单这一约束条件的主要原因,但我想,我们周围浮躁的风气还是有很大原因的’)。所以什么VB,C#,还有古老的Delphi7都很推崇。当然,这里说的都是在Windows下开发桌面应用。

作为开发PC上的桌面应用程序。我对嵌入式开发和移动开发不了解,不敢评论。但听朋友说,C语言非常适合嵌入式的开发。

术业有专攻,就开发桌面应用软件看来,C++还是有其得天独厚的优势的。当初从不同语言中选择了下,最后还是选择了C++。照顾了下跨平台性,没有选择C#/VB(说Mono的请无视掉我吧);然后在Java和Python中纠结了一段时间,如果你说Java不合适开发桌面应用,这不是有个Eclipse的RCP架构在那吗;后来还用Python做了一段时间,但考虑到效率问题,最后改用了C++。当初也想用Python写主体,关键部分用C++封装。但考虑到不同人员的背景知识,学习成本,库的接口等,还是放弃了,直接用C++。至于C语言嘛,用C++使用QT库比C语言太方便了,不是吗?GTK?众人的学习成本呐。。。

总体而言,对于桌面应用来说,在C/C++中,我是支持C++的。但这只是个人的观点,在实际中,语言使用的惯性等因素,也决定了在项目中使用哪种语言。

至于《C++ Primer Plus(第6版)》样章,我感觉其最大的看头是介绍的C++11的“新特性”,当然,这些是对初学者来说是新的,许多新标准的内容都是源自于Boost。这本书根据其前言来看,作者将其定义的是入门级的。但根据一些朋友的交流,都认为这本书不适合零基础的人读,当时讨论的是BS的《C++程序设计》比较好,我个人认为Walter Savitch写的《C++程序设计(第8版)》比较适合新手读。跑题了。。。我的猜想,可能由于作者定义为入门级的,所以书中根据目录和样章的内容来看,并没有完完整整的在书中介绍了所有的C++11的新特性。作者只是在书中穿插介绍了C++11中最可能用到的新特性,并新开辟了第十八章将本书中介绍的这些零散的C++11的新特性总结了下。所以,如果发现书中没有找到自己需要的C++11的新特性,也算正常的。

论坛徽章:
0
发表于 2012-07-03 17:57 |显示全部楼层
本帖最后由 aquei_cu 于 2012-07-03 17:58 编辑

毕业到现在的七年时间,一直从事windows平台下软件开发,使用C/C++语言。
不敢自称“过来人”,只是一个“在路上”的码农,就以码农的身份谈一谈自己对C语言,C++语言和争论的想法。
一、C++语言
1.1 classname::
每个类成员函数都要加个"classname::"
有一天,我写了一千行代码,我突然发现其中有几百行的函数定义都在写classname::这让我很很崩溃。
python是这个样子
  1. class A
  2. {
  3.     def f(self):
  4.         pass
  5. }
复制代码
跟C++类似的Objective-C是这个样子
  1. @interface A
  2. {
  3.     //
  4. }
  5. -(void)f;
  6. @end //A
  7. @implementation
  8. -(void)f
  9. {
  10.     //
  11. }
  12. @end //A
复制代码
少敲打了很多字母,码农的生活美好了一些,不是吗,不是吗?
类中的成员分为public,private,protected
protected除了练习和考试之外,至今没有在真正的项目里用过。
1.2 public,private一个成员变量真的要private之后再提供get() set()方法吗?
真的需要一个private的成员函数吗?
1.3 namespace
在以前的公司里,有个员工和我重名,当行政部,每次发放节日礼物的时候,
他们很自然的选择XXX1和XXX2的命名方式,
从来没有使用XX部的XXX和OO部的XXX进行区分。
程序语言是一门工具,用来表达思想的工具,
既然是这样的工具为什么不使用更贴近人类思考方式来进行,前缀+函数名不是很好,为什么还要命名空间?
命名空间解决C中的宏冲突,为什么还要命名空间?
为了少敲namespace::class::function,而是用using namespace,又带来了命名空间污染的问题。为什么还要命名空间?
C++的继承分为public private和protected。到已经忘记了,三种继承的区别,因为我根本没有用到也看不到有人用...
1.4 多态
  1. class A
  2. {
  3.         virtual void f();
  4. }
  5. class AA
  6. {
  7.         virtual void f();
  8. }
  9. class AB
  10. {
  11.         virtual void f();
  12. }
  13. A* pa = new AA();
  14. pa->f();
复制代码
最近一段时间学习了objective-c,发现基础教程里根本没提多态这个事儿,难道他们不够面向对象吗?不是,人家一个id类型加NSObject基类搞定了这一切。
void*的多态,才是真正的多态...

1.5 类竟然不是对象?!
如果类是一个对象,一切的调用就动可以在运行时解决。这个世界是不是美好了一些呢?
1.6 try...catch
如果try...catch有用,我还用if...else干嘛,如果我知道这里会异常,为我什么不前面做好检查,后面做好判断,就地把异常解决掉,非要throw出去,在外部处理呢?
1.7 很多很多
  还有很多很多的问题,比如标准库不标准,实现不一致等等。
  总之,C++语言是门复杂的语言,正因为他的复杂,造就了很多的缺点,码农们都知道一个道理,代码写的越多,BUG也就越多,一行代码不写,肯定是零BUG。同样,C++是复杂的,所以它可以商榷的问题肯定多。复杂的另一种说法是丰富,你可以随心所欲的从C++里抽象出一个子集来用,你觉得不好的地方可以不用,这就是C++。也是生活,选择才是最重要的。

二、C语言
C语言相对于C++是门简单的程序设计语言,因为简单所以值得吐槽的地方就比较有限,正是因为简单,导致你用起来的时候有大量的工作要做,比如字符串这玩意已经成为大多数语言内置的对象,但在C语言里,惨不忍睹啊,除了标准库里有限的几个函数之外,基本上就没有更深层次的支持,用C语言去做文本分析,做web开发?不管你疯没疯,反正我是疯了。还有这个int,变幻莫测的int到底是多少位?他的含义到底是神马?机器字长?整数?

三、争论
争论是个好现象,如果论坛失去争论,论坛将会怎样?
从争论中,我才能真正的了解到它的缺点。或者说系统的了解他的缺点,有论点有论证。没有争论就没有互动,这也是我喜欢论坛的原因之一。就像你百度搜索“面向对象缺点”一样,各个博客上充斥的满是一家之言,或者是转来转去的东西,根本听不到别的声音,只有在论坛中的争论,才能看到真正新鲜的东西,真正思考过的东西。
如果,一个帖子下面的跟贴,都是“沙发”“板凳”,“同意”,“楼主你太厉害了”,“楼主说的对”...这样的回帖,那论坛和博客和微博还有什么区别?!
对于个人的喜好,我喜欢看以下人的帖子:
@zylthinking 说那么多废话干嘛?!秀代码!
@starwing83  想法达人。
@chinesedragon  辛勤的新闻发布者。
@pmerofc  大家来找茬
@塑料袋  理论爱好者,喜欢把什么东西都归结到哲学上去解决他消灭它。
@群雄逐鹿中原  犀利!
@OwnWaterloo  标准爱好者,坑王
不喜欢以下人的帖子:
@nilgod  @walleeee

完。
胡言乱语了这么多,其实我是冲着书来的。祝自己获奖成功。



论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-03 23:18 |显示全部楼层
回复 66# 方兆国


    还是回归本贴主题吧。

C 或者是 C++ , 其实是仁者见仁,智者见智的事情。就如同我们现在写程序,C 和 C++ 都用,甚至有的时候是混着用的。我还是那句话,用最简洁的方式解决问题,编写出简单、健壮的程序代码,才是真正的理解了编程的精髓。为用某种语言而选择某种语言,实在不是一个好的方向。

至于说到程序设计,与选择 C 或者是 C++ 没有什么必然的联系。我们从程序开发的角度上说,这个是系统架构师和系统分析师决定的事情,他们根据任务需求来选择最适合完成工作的开发环境和开发语言。并形成软件的设计思想。当系统分析把所有的详细设计都弄出来以后,其实这个程序设计就已经完成了,剩下的只是程序代码的实现,或者说是在一个个约定的函数模型、类中填 code 而已。

然而,我们又不可否认的是,高质量的程序员在实现一个个的程序代码和类的时候,又能完整的考虑代码编写时可能会出现的问题,能用最简洁的代码实现复杂的任务,代码健壮而且高效,这样的代码,从欣赏的角度上来说,简直就是艺术品。

因此常常有人问写了多少多少行代码,其实那是虚的。一万行的代码,有的时候,可能比不上 100 行的代码,这就是高质量的程序员和一般程序员的典型差别。

多混 C 版吧,能学到很多的东西的。

论坛徽章:
0
发表于 2012-07-04 12:17 |显示全部楼层
回复 83# 方兆国

在不同的层次实现可移植性的代价和其性能表现是差别很大的,汇编作为第一层抽象代价非常之巨大,并且很复杂和繁琐,太偏底层,但是却是整个体系中必须的,必须为其他上层的构架提供服务和接口,但是却可以用C以很小的代价来进行替代,之前甚至操作系统都是汇编写的,那时候底层的东西不统一,太乱,你要在其基础上再构建很麻烦的,有了C之后,底层的很多东西都可以利用C来进行抽象封装,实现移植,操作系统也开始用C写了,各种大小,嵌入式底层都可以用C统一构建移植,稍微改改就能移植内核,比之以前不知道进步了多少倍,方便了多少倍,虽然没深入学过java,但是我还是知道java的所谓可移植完全依赖虚拟机,而它的虚拟机说白了还是基于传统的底层架构的,它的虚拟机也是一软件而已,本来可以直接运行东东,现在还要经过中间多出来一层,觉得有点蹩脚。。。还是没C的可移植性好,C的可移植性能应该是非常不错的了,而且非常成熟。。。。巨型机系统,微型机系统,桌面服务器,哪个搞不定!:wink:
可以说C的优秀特性已经使得它成为一门很主流的“汇编语言”,大家更多运用它的底层特性,进行系统级别的开发和架构

论坛徽章:
0
发表于 2012-07-05 14:05 |显示全部楼层
本帖最后由 aquei_cu 于 2012-07-05 14:05 编辑

回复 132# OwnWaterloo

回复 51# aquei_cu 
>> 1.1 classname::
我抱怨的是每次都要敲打"classname::"而不是抱怨声明的冗余。
就像你说的那样,因为C更照顾编译器的实现并给予程序员自己决定导出什么和其它模块如何引用的自由,
所以实现以后还要对每个函数依次的声明一遍,这种冗余是可以忍受的。而我也没有吐槽它。
但是每次敲打“classname::"的冗余,并没有给出一个让我去忍受的理由。
像objc
  1. @interface Class
  2. -(void) function;
  3. @end //ClassC
复制代码
这样美好一些不好吗?


>> 1.2 public,private一个成员变量真的要private之后再提供get() set()方法吗?
这是那些OO纠结者自讨没趣。

我说的并不是OO的问题,而是想说C++对于OO封装特性的支持,
public,private设计的时候很美好,用起来发现各种不合适,就像是一个过度设计。


>> 1.6 try...catch

既然用f去封装g,我认为f就应该对g进行完整的处理,也就是说f不应该留下一些不能处理的错误。
这样f对g的封装才有意义,不然f的调用者为什么要f而不是直接调用g?
这个问题也许是对f的设计想法差异。。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-02 10:34 |显示全部楼层
本帖最后由 zhugcx 于 2012-07-04 17:49 编辑

c++ 发展的不好,和语言本身没有很大的关系,主要是最终没能发展出一些很强大而通用的库
只是纠结于语法而不是发展功能,这可能是C++比较悲催的地方
C语言因其简单,比C++更易于学习,在嵌入式等资源少的领域得到很大发展。

所以我觉的,如果资源少就用C,资源多用些JAVA,PYTHON什么的,库多而开发高效,所以C++已经没有必要存在了

他们又说:“来吧,我们要建造一座城,和一座塔,塔顶通天,为要传扬我们的名,免得我们分散在全地上。”由于大家语言相通,同心协力,建成的巴比伦城繁华而美丽,高塔直插云霄,似乎要与天公一比高低。没想到此举惊动了上帝!上帝发觉自己的誓言受到了怀疑,上帝不允许人类怀疑自己的誓言,就像我们不喜欢别人怀疑自己那样,上帝决定惩罚这些忘记约定的人们,就像惩罚偷吃了禁果的亚当和夏娃一样。他看到人们这样齐心协力,统一强大,心想:如果人类真的修成宏伟的通天塔,那以后还有什么事干不成呢?一定得想办法阻止他们。于是他悄悄地离开天国来到人间,改变并区别开了人类的语言,使他们因为语言不通而分散在各处,那座塔于是半途而废了。

论坛徽章:
0
发表于 2012-07-02 10:39 |显示全部楼层
回复 2# zhugcx


   做游戏还得C++
   WP手机也用得到C++
   大型的软件如ps,office也用C++
   ......

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-02 12:27 |显示全部楼层
WP 应经在用C#了吧?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-02 12:30 |显示全部楼层
如今的手机游戏,还有用C++的吗
OBJECT C,JAVA ,C#。。。。
z75993971 该用户已被删除
发表于 2012-07-02 12:39 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
z75993971 该用户已被删除
发表于 2012-07-02 12:39 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2012-07-02 13:23 |显示全部楼层
从学生时期做单片机编程,到工作从事通信研发,发现C语言在嵌入式和底层OS上有优势,语法简单,可移植性强。
C++是面向对象语言,由C发展而来,但感觉并不彻底,在游戏开发领域(大型网游)使用率很高。
我觉得想做一名真正的程序员,C/C++都要学的。没有学了没用的知识,只是你暂时还没有用到的时候。

论坛徽章:
0
发表于 2012-07-02 13:25 |显示全部楼层
1、根据个人的特点选择:具备哲学思考力的人,选择C++吧;C++是门哲学。 你若真的学通了,不要担心无用武之处。至少我没听到过哪个真正C++的高手抱怨过没有舞台。美国评出计算机领域现存影响最大的人,第一名当之无愧高纳德;第二名C++之父。
2、C在嵌入式上面非常广泛,感觉适合混口饭吃。我也是用它混饭吃的。感觉性格沉稳、内敛,做事扎实的人适合用C;

论坛徽章:
0
发表于 2012-07-02 13:31 |显示全部楼层
您在C和C++之争中支持哪方,为什么?
想问一句,C在和C++争什么?有争过么?他们之间我觉得没有多少可以争的地方呀?效率?语言完整性?完美?很多答案很明确啊。
在很多方面,只要能具体出来,个人觉得C和C++就没有争的必要!所以,可以争的不是C/C++,而是个人的选择。
选择了嵌入式/OS就是选择了C/选择了大型应用软件开发,就选C++;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP