![]() |
1
26
这不是一个特别简单的问题。这取决于许多因素,包括:
就我个人而言,我真的很喜欢将类作为一种布局代码的方式。即使在编写C代码时,我也倾向于将所有内容保存在模块化文件中,其中包含文件范围静态函数“模拟”成员函数和(少数)文件范围静态变量“模拟”成员变量。话虽如此,我的大多数现有的嵌入式项目(所有这些都是相对较小的规模,最多包括128KB Flash,包括Bootloader,但通常较少)倾向于用C编写。现在,我有一个C++编译器,当然,我当然考虑移动到C++。 对于C++来说,简单地使用引用、重载和模板有很大的好处,即使你没有达到类。当然,我会停止使用许多更高级的功能,包括使用动态内存分配(new)。同样,如果可能的话,我也会避免在嵌入式C中进行动态内存分配(malloc等)。 如果你有一个C++编译器(即使它仅仅是G++),那么只需运行额外的类型检查就可以通过代码运行你的代码,这样你就可以减少代码中的问题数。C++编译器可以拾取一些静态分析工具无法发现的东西。 为了讨论许多无效的原因,人们拒绝C++,参见 Dan Saks' article on Embedded.com . |
![]() |
2
12
对于引导加载程序,明显的选择是C,特别是在嵌入式系统上。生成的代码将需要接近金属,并且很容易调试,可能通过进入组装,这很快变得困难,而不关心在C++中。此外,C工具链比C++工具链更普遍,允许您的引导加载程序在更多平台上使用。最后,生成的二进制文件通常较小,并且在编写C样式时使用较少的内存。 |
![]() |
3
11
如果您不需要使用对象方向,请使用C.简单的选择。它既简单又容易,同时完成相同的任务。 有些顽固派会不同意,但是OO是C++和GT;C,在很多情况下反之亦然。 |
![]() |
4
10
我会使用C,除非有一个特殊的理由使用C++。对于引导加载程序,您实际上不需要OO。 使用最简单的工具来完成工作。 |
![]() |
5
7
在C中编写程序与在C++中编写程序不一样。如果你知道如何只用C++来做,那么你的选择就是C++。为了编写Bootloader,最好将代码最小化,因此您可能不得不禁用标准C++库。如果你知道如何用C写,那么你应该使用C_,这是此类任务更常见的选择。 |
![]() |
6
4
前面的大多数答案都假设您的引导加载程序是小而简单的,这是通常的情况;但是,如果它变得更复杂(即,您需要能够从以太网端口、USB端口或串行端口加载……您需要验证正在加载的代码,然后才能清除现有代码等),您可能需要考虑E+C++. 我还发现引导加载程序和应用程序通常共享一些公共代码,因此您可能还需要考虑使用与应用程序相同的语言来促进代码共享。 |
![]() |
7
3
C语言比C++更容易解析。这意味着一个既有效C又有效C++的程序将更快地编译成C程序。可能不是一个主要的问题,但这只是另一个原因,为什么C++可能是多余的。 |
![]() |
8
1
与C++和Objo一起选择你需要的语言特征。只要您理解正在使用的C++抽象,您仍然可以完全控制输出对象代码。 如果避免使用虚拟函数,OO的使用仍然可以很好地运行。避免为传递值而需要大量复制的不可变对象类型,如std::string。但是,您仍然可以使用模板等功能,而不会对运行时性能产生任何实际影响。 |
![]() |
9
1
使用 C 具有 克里夫 . 它将使代码更简单,并减少其占用空间。可在以下位置找到: www.uclibc.org . |
![]() |
10
0
对于Bootloader这样的特定任务,我绝对不会使用C++。我认为标准的C++库至少是一对MB,而不是Bootloader中想要的东西。与C同行。 |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |