我正在学习对 Arduino 进行编程,但我有相当扎实的 C++ 背景,这意味着我非常失望地发现我无法使用 C++ 标准库。我一直在四处寻找,试图找出确切的原因,到目前为止,唯一合理的解释是 AVR-GCC 不符合 C++ 语言标准。
现在,我知道大多数编译器与标准都有微小的偏差,但我认为一定有一些非常大的东西将 AVR-GCC 与 GCC、Clang 或我之前使用过的任何其他编译器区分开来。就像一些完全缺失的非常重要的功能,或者其他什么。例如,我不能使用
std::vector
一定有充分的理由。它太有用了,不能无缘无故地放弃。
那么它是什么? AVR-GCC 方言中的巨大漏洞是什么导致 C++ 标准库无法在 Arduino 上运行?我问这个问题不仅仅是出于好奇,因为如果语言中存在巨大的漏洞,那么我需要在陷入一些我没有预料到的未定义行为之前了解它们。
我刚刚在尝试使用灵活数组(结构中的可变大小数组)时遇到了问题。我必须更改为 ua 指向结构体外部定义的数组的指针。
AVR-GCC 显然是爱好者的作品。本质上,没有人愿意承担编写标准库实现的艰苦工作。对于桌面平台来说,编写标准库并不是一项简单的任务,而且 Arduino 的有限功能只会让它变得更加困难。