免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux

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

论坛徽章:
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 19:03 |显示全部楼层
回复 51# aquei_cu

顶一个,说的相当到位

   

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
发表于 2012-07-03 19:14 |显示全部楼层
额……被无意识@召唤过来了……

本来不大想参加这次活动,主要是我自己对C/C++之争已经有了很清晰的认识,觉得没什么好表述的而已,不过看到了奖品中的Imperfect C++………………口水ing啊……残念上次没拿到《代码之魂》……

OK那就第一次正儿八经做活动(而不是搅场子Orz)吧,恩。


1、您在C和C++之争中支持哪方,为什么?

其实没什么支持不支持的,语言本质上就是工具,如果说倾向,也是只工具是不是顺手(基本要求)和工具是不是符合你的审美观(决定性要求)而已。就如同一个美工不会用一把铲子去画画一样。顺手的话,C/C++程度其实差不多,那么主要的区别就落在人的喜恶上了。C++编译器能帮你做更多,你能做更多magic的事,但随后你就会发现你的代码千疮百孔,别人可以用各种办法爆你的菊花(最简单的爆法:#define private public -_-||||),所以从个人感情上,我更喜欢C,除非直接改我的源代码,否则是什么就是什么,没有任何办法去破除代码的界限,可以很清晰地去做模块化和防御式的编程。当然C也绝对不是滴水不漏的,只是所有特性都在你心中,犯不着为了不小心踩到不该踩的地雷(默认类型转换啦,默认构造函数啊,默认xxxx啊神马的……)而烦恼。

但是,C++的灵活性啊,C++强大的编译器检查啊,怎么办?

我的想法是,C本身的编译器检查已经足够——如果你的接口设计的好的话。因此,我并不需要了解过多的概念。C++用过好几年,但是换到C,我感到久违的自由。

C还有一个问题是数据结构匮乏。一种办法是用数据结构库,另一个办法——我并不是独立地用C,我现在的开发基本上是C+Lua式的混合开发。Lua很小,可以很容易地包含在你的软件里面,你只需要根据Lua的规范(也可以违背),写Lua的C模块,然后你就可以在Lua里面做你想做的任何事情。所以今年的大部分时间,我写的都是C的Lua模块。

2、C和C++各自适合的领域是什么,为什么?

其实他们的领域是很有点重叠的,不然也不会有那么多争论。从技术上说,C++适合应用级代码,而C适合库级代码。所以用C写Lua模块(库)是很合适的。C++的灵活性适合书写逻辑比较复杂的东西,比如网游。虽然逻辑复杂本身有动态语言帮忙,但是很多时候你还是会觉得C++的效率更胜一筹。而C就适合给这样的C++程序写写底层的支持啦,库啦什么的。

那么,他们之间到底有没有优劣可言呢?对个人来说,是有的。对单个人来说,审美决定了他用C还是C++,比如Linus,使用C++就意味着跟无数细节作斗争,要么做苦行僧,要么出来混就一定得还。而C干净,整洁,出尘不染。然而干净漂亮的C却不太容易立刻做事,因为C缺乏一些基本的支持,而C++在丰富的标准库下,至少写一点简单的程序是没啥问题的。然而,这种简单性就像恶魔的诱惑,一步一步让你忘了美好代码的样子,最终看到满目苍一的代码的时候,要么你已经习惯了混乱,要么你会告别C++。

其实可以说是两种不同审美的争论吧。

3、读完试读章节后有哪些感想?(回答第3题的时候 需要标注图书名称,例如:《C++ Primer Plus(第6版)》+感想)

这里要说说《Imperfect C++》,CU做了这么多次活动,我是第一次下样张来看,这本书给我的感觉非常好。虽然我本人不用C++,但是我依然很喜欢研究C++,因为C++上面基本上各种特效都会有一点。Imperfect C++的文风很好,而又写的很严谨,我很喜欢~里面不完美的地方用方框框起来,很有Effective C++系列的味道(当然,从名字就可以看出其致敬之意)。Effective C++及其致敬的一些书我是很喜欢的,最喜欢的一本是《Exceptional C++》,这本书从实用角度上说更胜Effective C++,从猎奇角度上也比Exceptional C++优秀,是本不可多得的好书。恩,希望这次能拿一本回去,嘎嘎~~

就说这么多,欢迎拍砖哦~ @OwnWaterloo

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
发表于 2012-07-03 19:19 |显示全部楼层
回复 51# aquei_cu


    粗略的看了一下,很多观点想吐槽,无奈刚刚发完贴,手有点酸。我就直接说了,不喜的话就当没看见吧——虽然我是很希望你能看到的:这么多问题,有些的确是问题,但是大多数,绝大多数都是因为你的技术不够高,你的眼界不够远,你还没看到C++的真正核心,所以才会有这样的问题。以后遇到C++特性,别问“为什么要有”,问自己“什么时候会用”,多想想,多看经典书籍(特别是C++必知必会(C++ Common Knowledge)和Effective C++这两本),很多你所谓的“问题”就不再是问题了。

顺便再说说,objc其实很好,很多设计和OwnWaterloo的想法不谋而合,就是……似乎太丑了……

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
发表于 2012-07-03 19:24 |显示全部楼层
c++太复杂...学不会...

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-07-03 19:30 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-07-03 19:41 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2012-07-03 20:26 |显示全部楼层
各人觉得C++好。
首先的优势是面向对象。
其次,代码好用,比如string要比char* 好用,输入输出流,要比fscanf/fprintf,sscanf/sprntf好用太多了。
再次,STL也是一大利器。
最后C++更安全,const类型,引用,智能指针都增加C中常见bug出现的几率。

论坛徽章:
0
发表于 2012-07-03 20:43 |显示全部楼层
1、您在C和C++之争中支持哪方,为什么?
答:都支持,在学校的时候更喜欢C++,工作之后一直都是用C开发,感觉C比C++更加简洁,模块化也非常好,看linux内核就知道了。
2、C和C++各自适合的领域是什么,为什么?
答:就个人经历来说,C在金融行业,比如其中前置系统,核心系统用的是比较多的,通讯行业用的很多,交换机路由器上的系统大多是C开发的,C++工作上没用过。

论坛徽章:
1
技术图书徽章
日期:2014-04-24 15:46:21
发表于 2012-07-03 21:30 |显示全部楼层
楼主,你这是要挑起口水战啊。
虽然这不是你的本意,我估计最终会变成对喷
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP