笔者最近在开始一些C
的应用程序开发,主要在linux下进行,目标是跨平台的应用程序。虽然是基于某开源程序进行开发,看了很多源码,也动手扩展和修改了开源程序,感触颇多。C
实际上是语法最为简单的编程语言之一。可是在实际的开发中,尤为是用C来开发一些系统应用程序,会感受到比Java
之类的要难的多,到底是为何呢?有人可能会说是手动内存分配的复杂性,字符串处理的不便捷...都没错,笔者认为,总结一句话是标准化和工业化程度决定了使用的难易程度
。linux
若是咱们使用Java
来开发一个程序,Java
的标准化框架和包,会相对来讲极大的规范程序员的编程行为,为程序员带来相对很大的便利性。越是高层次的语言,这越是明显。不少语言,将不少问题提炼到语法层面,经过增长语法的复杂度,从而强制性的让程序员规范编程行为和思路,也是一个缘由,好比绝大部分语言提供try catch
来作异常捕获。然而,C语言并无原生的try catch
。程序员
而C
语言,虽然有标准C
库,可是在使用的时候,每每会遇到不一样平台的差别,这也是为何多数C
程序须要经过configure
在编译程序前得到这些差别的缘由。因此即便是标准C
库,在跨平台方面也有诸多问题。在Java
等语言中,不少有差别的问题被重写了,或者被屏蔽了,从而在标准库方面更为统一,所以易用性提升不少。算法
另外一个方面,当咱们要进行一些系统编程时,好比线程控制、文件读写、网络读写时,平台的差别更大。虽然,诸如POSIX
等标准试图解决问题,可是因为Unix的各大分支(包括linux)长期的历史缘由,依旧不能很好的作到统一。而在这方面,Java
等语言在统一化方面作的就十分完整和到位。编程
C语言因为语法十分简单,致使程序员的编程行为风格迥异。而面向对象的提出,使得程序员在编程行为上有了一次高度的统一。C++是面向对象的先驱之一,然而因为C++保留了对C的兼容性,反而也限制了C++在标准化上的进程。显然,不会有人以为C++比Java简单。固然,C不是不能“面向对象”,面向对象不是一种语法,而是一种编程范式,只是C在“面向对象”时并无咱们熟知的范式而已。并且大部分的C程序不采用面向对象,面向对象也不见得是万能药。在使用Java标准库以外的第三方库时,之因此以为没有违和感,缘由之一就是你们都遵循了面向对象的原则。固然,不一样的语言的范式原则不必定是面向对象。网络
那么,若是要基于C语言来作开发(应用程序),应该如何开展呢?究竟要作些什么准备呢?经过阅读源码,笔者认为,程序员应该有意识的积累和准备一些经常使用的数据结构和算法、系统封装,还须要对系统底层有比较深刻的理解,这样就能造成一层标准层
,有了这个标准层
,算是入门,而且有能力开始工程实践了。不然举步维艰。数据结构
一般来说,这些标准层
包含:框架
内存池。提升内存分配和管理的效率和便利性,甚至能够本身实现GC。socket
日志。日志之因此如此重要,你懂得,别期望IDE来调试。数据结构和算法
异常处理。利用C库和宏,实现一个try catch,会十分有用。编程语言
字符串处理。便捷的字符串处理毋庸置疑是极其重要的。
经常使用的数据结构。好比:list、map、array。
封装并屏蔽平台差别。好比socket、thread、file等系统直接相关的调用。
针对上述的内容,笔者会结合开源软件,逐步作一些总结。