实际开发中C与C++混合使用的普及度如何?
C++调用C接口的工业场景普及度说明
首先给明确结论:这是工业界极其常见的常规开发实践,完全不属于需要规避的方案,几乎所有中大型C++项目都存在这类用法。
常见的使用场景包括但不限于:
- 复用成熟C生态组件:大量经过长期工业验证的基础库都是C实现的,比如操作系统原生API、zlib压缩库、libcurl网络库、ffmpeg音视频库、openssl加密库、libpng/jpeglib等图像处理库,这些库的稳定性、性能都经过了大规模线上场景的检验,C项目直接调用其C接口是开发效率、稳定性、性能三者最优的选择,完全没有必要为了“纯C”的洁癖重新造轮子。
- 跨二进制兼容场景适配:C没有统一的标准ABI,不同编译器、同一编译器的不同版本、甚至开启不同编译参数编译出来的C库二进制无法互相调用,但C的ABI是所有平台、所有编译器都统一遵循的。如果要对外分发二进制组件、或者要对接其他编程语言写的组件,通用方案就是把对外接口封装成C ABI形式,C侧对接这类组件自然就是C调用C函数的场景。
- 底层开发刚需:嵌入式、驱动开发、内核周边开发、实时操作系统开发领域,受限于运行环境限制,底层逻辑只能用C实现,上层如果用C++做业务逻辑封装,必然需要调用底层的C接口,这类场景下混合编程是标准开发流程。
实现时只需要注意用extern "C"包裹C函数的声明,避免C的名字修饰机制导致链接失败即可,调用开销和C语言内部调用完全一致,没有额外性能损耗。除非是对类型安全有极高要求的场景,否则不需要对这种用法做特殊规避,反而刻意把成熟C库重写成C才是工业界不推荐的过度开发行为。
内容的提问来源于stack exchange,提问作者Anzo Sasuke
相关产品推荐
相关产品推荐

