许多嵌入式工程师使用c ++,但有些人认为它很糟糕,因为它是"面向对象的"?
面向对象是否真的对嵌入式系统有害,如果是这样,那为什么会这样呢?
编辑:这里有一个快速参考,询问:
所以我们希望人们不要使用除...,malloc ......,或其他带有大额惩罚的面向对象的练习.
我想问题是嵌入式系统环境中被认为是重量级的对象?这里的一些答案表明他们是,有些人认为他们不是.
Jos*_*phH 14
虽然我不确定它是否回答了你的问题,但我可以总结出我之前公司源代码纯粹的原因.
首先值得总结一下情况:
鉴于此,我们完全使用C语言,甚至只使用了一组受限制的C 89.结果代码具有高度可移植性.我们经常使用面向对象的概念.
这些天"嵌入式"是一个非常广泛的定义.它涵盖了从没有RAM或C编译器的8位微处理器到基本上高端PC(尽管没有运行Microsoft Windows)的所有内容 - 我不知道您的项目/公司在该范围内的位置.
Ale*_*x B 13
从表面上看,动态内存分配与面向对象的软件设计是完全独立的概念,因此它是完全错误的.您可以使用面向对象的设计,而不是使用动态内存分配.
实际上,您可以在一定程度上在C中执行OO(这就是Linux内核所做的).许多嵌入式开发人员不喜欢C++ 的真正原因是它非常复杂,很难在其中编写直接且可预测的代码.Linus 最近对他为什么不喜欢C++ 有一个很好的咆哮(我保证,它比旧的更好,更合理).可能大多数人都没有很清楚地表达出来.
面向对象非常适合嵌入式系统。它着重于封装,数据隐藏和代码共享。一个人可以拥有面向对象的嵌入式系统,而无需划分或动态分配内存。
无论面向对象,面向数据还是程序编程,分区和动态内存分配都是嵌入式系统的敌人。这些概念可能会或可能不会在面向对象设计的实现中使用。
面向对象允许UART类在不知道消息对象内容的情况下发送消息对象实例。消息可以是基类,并且可以具有几个后代类。
C ++语言允许通过构造函数,复制构造函数和析构函数来促进嵌入式系统中的安全编码,而这些构造函数只能在训练有素的C语言嵌入式系统中记住。
异常处理也是使用C语言工作的痛苦。C ++提供了嵌入到该语言中的更好的功能。
C ++语言提供了用于编写通用代码以处理不同数据类型的模板。一个典型的例子是环形缓冲区或循环队列。在C语言中,必须使用“指针使之无效”,以便可以传递任何对象。C ++提供了一个模板,因此可以编写一个Circular_Queue类,该类适用于不同的数据类型并具有更好的编译时类型检查。
继承允许更好的代码共享。共享的代码被分解为基类,并且可以创建共享相同功能的子类。通过继承。
C语言提供函数指针。C ++语言为函数对象(带有属性的函数指针)提供了便利。
抱歉,我只是不喜欢那些因为谣言以及对C ++的了解和经验很少而将嵌入式系统限制为C语言的人。