【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
不知道现在的同学用什么编程语言来入门的?对于我们这一代人来说,甚至是90年代读大学的同学来说,c语言、汇编语言都是入门开发的一门基础功课。c语言的语法很简洁,很多学编译课程的朋友都喜欢拿它来进行练手。但从另外一方面来说,c语言也很复杂,使用上要十分小心谨慎,稍不注意就可能down掉程序。所以,究竟c好不好用,就看各位的想法了。下面讨论的,主要是个人认为的优缺点,供大家参考。
优点:
1、学习的人很多。这在公司招聘的时候是一个优势。
2、适合几乎所有的平台。几乎所有的os都支持c语言开发。
3、适用于底层、中层、上层开发。不管是os、compiler,还是db、web server,亦或者是app,c都可以担任开发。
4、第三方库最多。由于历史的积累,c的开发库几乎是最多的。当然其他语言,比如python也很多。
5、开发效率最高。c编译生成的都是会编代码,效率肯定比虚拟机要好一些。
缺点:
1、内存空指针问题,这个问题老生常谈。
2、内存越界,不管是堆越界、还是栈越界、全局数据越界,一旦发生,debug很困难。
3、内存泄漏,编写server最容易出现这个问题。
4、死锁。这个问题不一定是c的问题,其他编程语言也有。但是c出现的机会更大。
5、嵌入式汇编。编写kernel时需要中断、自旋锁、定时器、抢占、乱序、内存屏障,编写十分复杂。
6、句柄泄漏。这个在linux上面比较常见。
7、算法库不多,不像c++的stl,或者是java的算法库,大多数算法要自己编写。
8、优秀的人太少。因为c威力巨大、有很多的风险,所以可以灵活使用、达到nginx或者lighttpd水平的人甚少。
就个人经验而言,特别是上层开发来说,内存问题经常是困扰程序员的大问题。正因为如此,设计师才开发了很多的脚本语言和虚拟机语言。不管是java,还是python、js,它们开发上层代码都是很不错的选择。但是如果是底层软件、算法软件、db软件、web server等等,c语言还是拥有绝对的优势,这主要体现在执行效率上面。
然而对于个人来说,学习c再怎么努力都不为过。同样,不可否认,对于公司或者企业来说,c本身隐藏着巨大的风险,一个公司也不可能招聘到那么多顶级的c程序员。因此,如何从c语言中分出框架、流程、结构,甚至是如何让c和其他脚本语言配合,一起为项目服务,这些都是需要好好思考的问题。下面介绍一下为了克服这些问题,可以做一些什么措施。
措施:
1、建立代码规范。这个在公司入职的时候就要说清楚,比如禁止使用strcpy,必须用strncpy。
2、建立代码框架、流程。少部分人编写框架,大部分人只要会注册、回调,使用框架就可以了。
3、使用pclint、splint这类静态检查工具。
4、开启最严格的编译选项。
5、定时构造版本。比如,使用jenkins就不错。
6、编写单元测试,比如cunit。
7、使用内存检测工具,比如valgrind。
8、使用性能分析工具,比如oprofile。
9、使用reactor机制,避免死锁等问题。
10、使用c+lua机制,框架用c完成,lua完成业务。
11、合理使用第三方库来完成工作,自己只开发最重要的那一块。
12、测试驱动开发,必须把测试贯穿于设计、开发、验证、交付的所有环节。
上面的做法只是基于过去的实践,肯定不是很周全,相信很多朋友都有更多、更好、更新的方法。欢迎大家通过邮件一起交流。
[全文完]