嵌入式程序开发,C语言和C++究竟应该用哪个?

在嵌入式软件程序开发中,C语言无疑是最常被使用的程序语言。不过应该明白的是,有些嵌入式硬件同时提供C语言程序编译器以及C++程序编译器,而相比于C语言,C++的确具备很多非常好用的特性。

C++更好用?

C++更好用?

小明是一名嵌入式软件工程师,他擅长C语言和C++编程,现在需要在一款提供C++和C89编译器的4KB RAM 硬件设备上进行程序开发,他觉得C++有下面这些好用的特性:

C++支持inline函数,它比define宏定义安全许多。

C++支持命名空间(namespaces)。

C++因为有模板和很多类型转换,因此类型安全性比C语言好。

C++支持函数重载。

小明还有理由坚持只使用C89进行程序开发吗?

还有理由坚持只使用C89进行程序开发吗?

讨论

对于资源有限,比如RAM只有4KB的设备,我通常在正式开发C语言程序之前,会先写一些样例试水。天下没有免费的午餐,C++的一些好用特性其实是以牺牲性能为代价换来的,例如RTTI,动态类型转换,多重继承,多态以及异常处理都会带来一定的运行时开销。

另外,在嵌入式环境中,通常需要在硬件设备可以正常使用之前对其初始化,如果没有操作系统或者引导加载程序,这些初始化工作需要由程序员编写的程序完成。

应该明白的是,C++程序中的全局对象的构造函数是在 main() 之前运行的,因此在某些情况下,程序员将不得不修改本地的CRT0.S,以便在调用全局构造函数之前完成硬件的初始化。

在调用全局构造函数之前完成硬件的初始化

因此,如果希望使用C++方便的进行嵌入式程序开发,最好限制使用C++的一些开销较大的高级特效。但是使用C++进行C语言风格的程序开发,倒不如直接使用C语言了。

此外,使用C语言进行嵌入式程序开发更容易把控最终生成的指令,能够得到更精确的硬件控制,这对于资源匮乏的嵌入式设备来说是非常可贵的。尤其在RAM只有4KB的设备上开发程序,使用C++要小心很多细节,反而没有使用C语言方便了。

还有种情况需要考虑,就是很多嵌入式设备并不提供C++编译器,因此虽说大多数优秀的C语言程序员使用C++没有什么问题,但是相比较而言,他们(包括我)更了解C语言,知道每一行代码究竟会做哪些工作,以及开销如何,这对于开发使用更小开销实现更大效率的程序很有帮助。

使用更小开销实现更大效率

C语言语法比C++语法简单的多,也正因为如此,甚至很多程序员认为C语言是低级语言。正如前面所讨论的,C语言的每一行代码的意义都很明确,这使得C语言程序员把自己的精力主要花费在在硬件和构建良好的的和数据结构以及算法上,而复杂的C++则会让程序员花费大量时间挠头,想知道里面发生了什么,以及为什么不能在特定的环境和背景下做一些完全合理的事情,而只能服从编译器。

简单来说,C语言程序更加可控,而嵌入式程序员一般都是控制欲很强的性格,从这一层面考虑,C语言也更加适合嵌入式程序开发。

C语言也更加适合嵌入式程序开

小编给大家推荐一个学习氛围超好的地方,鼠标放到头像上就能看到

小结

简单来看,在嵌入式程序开发领域,C语言比C++更加合适主要有两个原因:

1. C语言程序更好预测其代码尺寸和开销,这对于RAM只有4KB的资源匮乏的嵌入式设备来说来很重要。

2. 大多数嵌入式程序员更了解C语言,因此为了促进同事间的协调性,更推荐使用大家都喜爱的程序语言。