C++;AVR-GCC中的标准符合性 我正在学习编写我的ARDUNO,但是我有一个C++的很好的背景,这意味着我很失望,因为我不能使用C++标准库。我一直在寻找,试图找出原因,到目前为止,唯一合理的解释是AVR GCC不符合C++语言标准。

C++;AVR-GCC中的标准符合性 我正在学习编写我的ARDUNO,但是我有一个C++的很好的背景,这意味着我很失望,因为我不能使用C++标准库。我一直在寻找,试图找出原因,到目前为止,唯一合理的解释是AVR GCC不符合C++语言标准。,c++,arduino,avr-gcc,c++-standard-library,C++,Arduino,Avr Gcc,C++ Standard Library,现在,我知道大多数编译器都与标准有一些细微的偏差,但我认为AVR-GCC与GCC、Clang或我以前使用过的任何其他编译器之间一定有很大的区别。比如一些完全缺失的重要功能,或者别的什么。例如,我不能使用std::vector一定有很好的理由。这太有用了,不能无缘无故地放弃 那是什么呢?AVRGCC方言中的巨大漏洞是什么使得C++标准库在阿杜伊诺上不起作用?我问这个问题不仅仅是出于好奇,因为如果语言中存在巨大的漏洞,那么我需要在我陷入一些我没有预料到的未定义行为之前了解它们。AVR-GCC是。基本

现在,我知道大多数编译器都与标准有一些细微的偏差,但我认为AVR-GCC与GCC、Clang或我以前使用过的任何其他编译器之间一定有很大的区别。比如一些完全缺失的重要功能,或者别的什么。例如,我不能使用
std::vector
一定有很好的理由。这太有用了,不能无缘无故地放弃


那是什么呢?AVRGCC方言中的巨大漏洞是什么使得C++标准库在阿杜伊诺上不起作用?我问这个问题不仅仅是出于好奇,因为如果语言中存在巨大的漏洞,那么我需要在我陷入一些我没有预料到的未定义行为之前了解它们。

AVR-GCC是。基本上,没有人愿意承担编写标准库实现的艰巨工作。对于桌面平台来说,编写标准库并不是一项简单的任务,Arduino的有限功能只会让编写变得更加困难

这就是C++,它在嵌入式世界中都有不符合性、不兼容性和全面的支持。我知道这很不幸。就像进入新世纪的13年,我们有时感觉好像还是90年代。在我看来,大多数嵌入式C++平台不与STDLIB一起传输,主要是因为没有人会真正使用它。anyways@PlasmaHH:部分,但听起来更像是一个借口。@Haroogan:也许吧,但这是一个很好的借口。如果没有人会使用库,我就不想编写和维护它。@Fanael-这就是静态链接的全部内容:链接器会提取实际使用的代码,而不是整个库。库本身的大小与可执行文件的大小无关。你能解释一下为什么
PROGMEM
表示“爱好者”?@angelatlarge:好的编译器不需要关键字。此外,好的编译器编写不会以“没有关于
PROGMEM
应该去哪里的硬性规定”而告终。C和C++的语法可能有一些歧义,但在这个范围内是不可能的。语法并不是模糊的。我仍然被这样的说法弄糊涂了:
volatile
之类的东西是否是糟糕编译器设计的证据?那么
寄存器
呢?鉴于AVR是哈佛体系结构的处理器,RAM非常少,但能够在ROM中存储数据(与各种性能成本相关),我不确定我是否理解您关于硬规则和模糊语法的观点。@angelatlarge:volatile的语法定义非常明确。当然,它在很多地方是合法的,这取决于您实际声明的内容(例如,对于成员函数,它排在最后),但是
volatile
的语法是由“硬性规则”定义的,与
PROGMEM
不同。是的,
register
按照今天的标准是不好的(完全被忽略了)。C++已经回收了它的表兄弟关键字,<代码> Auto <代码>,为了更有用的目的。