是否有任何理由使用 C 而不是 C 进行嵌入式开发?

新手上路,请多包涵

问题

我的硬件 C++ 和 C89 上有两个编译器

我正在考虑将 C++ 与类一起使用但没有多态性(以避免 vtables)。我想使用 C++ 的主要原因是:

  • 我更喜欢使用“内联”函数而不是宏定义。
  • 我想使用名称空间,因为我的前缀会使代码混乱。
  • 我认为 C++ 类型更安全,主要是因为模板和详细的转换。
  • 我真的很喜欢重载的函数和构造函数(用于自动转换)。

在为非常有限的硬件(4kb 的 RAM)进行开发时,您是否认为有任何理由坚持使用 C89?

结论

谢谢你的回答,他们真的很有帮助!

我想通了这个主题,我会坚持使用 C,主要是因为:

  1. 用 C 语言预测实际代码更容易,如果您只有 4kb 的内存,这一点非常重要。
  2. 我的团队主要由 C 开发人员组成,因此不会经常使用高级 C++ 功能。
  3. 我找到了一种在我的 C 编译器 (C89) 中内联函数的方法。

很难接受一个答案,因为您提供了这么多好的答案。不幸的是,我无法创建一个 wiki 并接受它,所以我会选择一个让我思考最多的答案。

原文由 Piotr Czapla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 605
2 个回答

使用 C 而不是 C++ 的两个原因:

  1. 对于很多嵌入式处理器,要么没有 C++ 编译器,要么你必须为此付出额外的代价。
  2. 我的经验是,相当大比例的嵌入式软件工程师很少或根本没有 C++ 经验——要么是因为(1),要么是因为它往往不会被教授电子工程学位——所以最好坚持他们知道什么。

此外,原始问题和一些评论都提到了 4 Kb of RAM 。对于典型的嵌入式处理器,RAM 的数量(大部分)与代码大小无关,因为代码是从闪存存储和运行的。

当然,代码存储空间的数量是需要牢记的,但随着市场上出现新的、容量更大的处理器,除了对成本最敏感的项目之外,它不再像过去那样成为问题。

关于将 C++ 的子集用于嵌入式系统:现在有一个 MISRA C++ 标准,可能值得一看。

编辑: 另见 这个问题,它引发了关于嵌入式系统的 C 与 C++ 的辩论。

原文由 Steve Melnikoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

我推荐带有限制和注释的 C++。

  1. 上市时间和可维护性。 C++ 开发更加简单快捷。因此,如果您处于设计阶段,请选择一个足以使用 C++ 的控制器。 (请注意,一些大批量市场需要尽可能低的成本,而您无法做出此选择。)

  2. 速度。 C 可以比 C++ 更快,但请确保速度增益不大。因此,您可以使用 C++。开发您的算法,测试它们,并仅在需要时使它们更快(!)。使用分析器,指出瓶颈并以 外部“C” 方式重写它们,以实现 C 速度。 (如果在 ASM 中实现该部分仍然很慢)

  3. 二进制大小。 C ++代码更大,但这是一个 很好的答案,可以说明细节。无论是使用 C 编译器还是 C++ 编译器编译,给定 C 代码的编译二进制文件的大小都是相同的。 “可执行文件的大小几乎与语言无关,而与项目中包含的库有关。” Go with C++ but avoid advanced functionalities, like streams , string , new , virtual functions, etc. Review all library function before letting由于大小限制(基于 答案),它们在最终代码中

原文由 betontalpfa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题