c++是c语言的升级版,然而c语言却在某些方面优于c++。好多开源库源码,很多都是c语言,极少c++,印象中只有facebook的thrift,谷歌的glog以及Jsoncpp是用了c++。这可能与库的特点有关,
兼容性要强,并不像应用软件一样,对开发周期卡的很紧。这就使得库作者,可以静下心来制作各种轮子,因为可以长期使用,所以这些轮子的制作成本也就分散了。
所以关键不在轮子本身,只要轮子足够的好用,不出问题。这就解决了轮子问题。
c++有面向对象,可以将函数和变量封装一下。而c也是有struct的,变量和函数指针也都可以打包在一起,这样几乎是面向对象。当然挂载的函数是游离的,但只要符合一定命名法则并放在一定的文件中,
也就很整洁了,可读性也不会太差。只把类当作类使用,反倒避免记忆c++那一堆初始化和默认函数规则。当然有时要写一些init函数,而c++的类很多也都会设计init函数。
c语言的库大部分都使用了Impl设计模式,能减少编译时间,可能主要还是接口和实现分离吧。动态绑定需求场景真不多,但面向接口编程真的是范式了。这就解决了封装问题。
c语言缺乏template,后果是要把list,散列表等手动实现一遍。好在代码可读性提高了。另外linux系统也提供了一些现成的链表接口,如 TAILQ系列,也足以应付日常动态扩增的资源。