多年来我工作的项目大多是通讯协议栈。INAP,SS7,MAP、BSSAP,SAAL2,ALCAP,NBAP(用Telelogic 生成代码),到后来还做过AT-COMMAND.有一阵子开发手机MMI,有点脱离了协议栈。后来有回来做GSM,现在做LTE协议栈。我刚刚为了LTE的RRC编写了一个ASN的PER代码编译器。回想起当年刚毕业后第一个任务,就是INAP的ASN BER编解码,似乎又回到了原点。
自从多年前开始用C++之后,再也不愿意回过头用C来编码。最近又被人在这个问题上纠缠, 打算在这里好好理论一下……
0,C++编程的层次
1,使用class封装数据和方法,有意识地将部分成员设置为private.
2,学会使用继承来实现代码的重用
3,能使用虚函数来实现逻辑的抽象。有可能他已经开始用const来保护成员
4,这一步是3的自然递进,学会用纯虚函数定义接口。他已经习惯于thinking in c++
5,经常用STL来编写程序。
6,进入GP的世界。他已经离不开C++.回到C时代他宁愿罢工。
7,用exception.之所以把这个列为高层次,是希望你在非常精通之前,最好不要用这个玩意。ok,你现在已经是大牛了,用吧,我相信你。
……
N,进入language之上的世界。
为什么ZTE,HUAWEI等公司都用C而不用C++?主要是因为C++程序员比较少。一个新手编写C++代码。应该按照上述层次循序渐进,最怕的就是什么都尝新鲜。乱用高级特性的代价是程序错了都不知道哪里错了。
大公司对程序员个人能力的培养是极其有限的。绝大多数人没有机会从头设计和开发一个模块。他们的工作是在别人的基础上做少量的修补。他们被培养成一个follower,一个log分析人员……一个憋屈的人,连续几年做一个模块,直到离职
1,效率问题
很多不懂C++也从未用C++写过程序的人,他也敢评论C++.第一条往往是C++效率低。
实际上程序的效率取决于程序员。他采用的算法基本上决定了80%.其次是高级语言优化能力。优化得好的代码,有效利用Cache,会快很多。不过,大多数人所知道的优化方法,实际上是没有意义的。最后,如果需要,再用汇编优化关键路径。
2,C++容易出错
这是对的,对于不擅长的人。
3,很多系统不支持C++
有些系统不支持,但是已经非常少了。你还在那样的系统上工作吗?我曾经面对各种质疑坚持推进C++在一个小系统中的使用。结果没有任何问题。客户的反映是,我们提供的产品接口是最合理的最容易理解的。
开发DSP的领域,虽然系统开始支持C++了,但是绝大多数程序员都没有转过来。主要是因为DSP处理的是运算密集但是输入输出单调,数据路径单调的工作,根本不需要C++出马。
C++是面向大系统的设计语言。