【问题标题】:C++ Standard compliance in AVR-GCCAVR-GCC 中的 C++ 标准合规性
【发布时间】:2013-04-29 10:23:37
【问题描述】:

我正在学习为我的 Arduino 编程,但我在 C++ 方面有相当扎实的背景,这意味着我很失望地发现我无法使用 C++ 标准库。我一直在四处寻找确切的原因,到目前为止唯一合理的解释是 AVR-GCC 不符合 C++ 语言标准。

现在,我知道大多数编译器与标准的偏差很小,但我认为肯定有一些非常大的东西将 AVR-GCC 与 GCC、Clang 或我以前使用过的任何其他编译器分开.就像一些完全缺失的非常重要的功能,或其他东西。例如,为什么我不能使用std::vector 一定有充分的理由。它太有用了,不能无缘无故地离开。

那是什么? AVR-GCC 方言中使 C++ 标准库无法在 Arduino 上运行的巨大漏洞是什么?我问这个不仅仅是出于好奇,因为如果语言中存在巨大的漏洞,那么我需要先了解它们,然后再犯一些我没想到的未定义行为。

【问题讨论】:

  • 这就是 C++,它在嵌入式世界中具有所有不合规、不兼容和整体糟糕的支持。这很不幸,我知道。进入新世纪已有 13 年,有时感觉我们仍处于 90 年代。
  • 在我看来,大多数嵌入式 c++ 平台不附带标准库,主要是因为无论如何没人会真正使用它
  • @PlasmaHH:部分原因,但这听起来更像是一个借口。
  • @Haroogan:也许吧,但它非常好。如果没人会使用它,我不想编写和维护一个库。
  • @Fanael - 这就是静态链接的全部意义:链接器提取实际使用的代码,而不是整个库。库本身的大小与可执行文件的大小无关。

标签: c++ arduino avr-gcc c++-standard-library


【解决方案1】:

AVR-GCC 是 clearly the work of hobbyists。本质上,没有人愿意承担编写标准库实现的艰苦工作。编写标准库对于桌面平台来说并非易事,而 Arduino 的有限功能只会让它变得更加困难。

【讨论】:

  • 你能解释一下为什么PROGMEM 的意思是“爱好者”吗?
  • @angelatlarge:好的编译器不需要关键字。此外,好的编译器不会以“没有关于PROGMEM 应该去哪里的硬性规定”而告终。 C 和 C++ 的语法可能有些歧义,但不是这个规模。语法模糊。
  • 我仍然对这个说法感到困惑:像volatile 这样的东西是编译器设计不佳的证据吗? register 呢?鉴于 AVR 是一个哈佛架构处理器,RAM 很少,但能够将数据存储在 ROM 中(伴随着各种性能成本),我不确定我是否理解你关于硬性规则和模糊语法的观点。跨度>
  • @angelatlarge:volatile 的语法定义非常明确。当然,它在多个地方是合法的,并且它确实取决于您实际上声明的内容(例如,对于成员函数,它位于最后),但 volatile 的语法是由“硬性规则”定义的,与 @ 不同987654328@。是的,register 按照今天的标准来说很糟糕(完全被忽略了)。 C++ 已经回收了它的表亲关键字auto,用于更有用的目的。
  • @MSalters 要注意的另一件事是 IAR 做同样的事情....你必须为此付费
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多