我正在开发一个软件库,用于嵌入式系统,如ARM芯片或TI DSP(对于大多数嵌入式系统,但如果它也可以在PC环境中使用它也会很好).显然,这是一个非常广泛的目标系统,因此能够轻松移植到不同的系统是一个优先事项.该库将用于与特定硬件接口并运行一些算法.
我认为C++是C语言的最佳选择,因为它更易于维护和阅读.我认为额外的开销是值得的,因为它能够在面向对象的范例中工作.如果我是为一个非常具体的系统编写的,我会在C中工作,但事实并非如此.
我假设现在大多数流行嵌入式系统的编译器都可以处理C++.它是否正确?
我还应该考虑其他因素吗?我的思路是否正确?
如果可移植性对您来说非常重要,特别是在嵌入式系统上,那么C肯定是比C++更好的选择.虽然嵌入式平台上的C++编译器正在迎头赶上,但是C的广泛使用并不匹配,因为任何自尊平台都有兼容的编译器.
而且,我不认为C在连接硬件方面不如C++.抽象量足够低(即没有深层次的层次结构),使C成为一个很好的选择.
对于ARM来说,C++肯定有很好的支持.ARM有自己的编译器和g ++也可以生成符合EABI的ARM代码.对于DSP,你必须查看他们的工具链来决定你将要做什么.请注意,DSP附带的库可能无法实现完整的C或C++标准库.
C++适用于低级嵌入式开发,用于SymbianOS内核.话虽如此,你应该尽可能地保持简单.
避免可能需要更多库支持的异常(因此使用new(std :: nothrow)Foo而不是new Foo).
尽可能避免内存分配,并尽早完成.
避免复杂的模式.
请注意,模板可能会使代码膨胀.
我看到很多人抱怨C++"臃肿"并且不适合嵌入式系统.
然而,在接受Stroustrup和Sutter采访时,Bjarne Stroustrup提到他看到了大量模板化的C++代码(IIRC)进入了宝马的制动系统,以及战斗机的导弹制导系统.
我从这里得到的是,该语言的专家可以用C++生成复杂,高效的代码,这些代码当然适用于嵌入式系统.但是,"C With Classes"[1]程序员不知道里面的语言会生成不合适的膨胀代码.
问题归结为一如既往:您的团队可以用哪种语言提供最好的产品?
[1]我知道这听起来有点贬义,但是我要说我认识了很多这些人,他们制作了大量相对简单的代码来完成工作.