提问人:Michael Francis 提问时间:4/29/2013 更新时间:11/11/2023 访问量:4049
AVR-GCC 中的 C++ 标准合规性
C++ Standard compliance in AVR-GCC
问:
我正在学习对Arduino进行编程,但我在C++方面有相当扎实的背景,这意味着我非常失望地发现我无法使用C++标准库。我一直在四处寻找,试图找出确切的原因,到目前为止,唯一合理的解释是AVR-GCC不符合C++语言标准。
现在,我知道大多数编译器都与标准有细微的偏差,但我认为一定有一些非常大的东西将 AVR-GCC 与 GCC、Clang 或我以前使用过的任何其他编译器区分开来。比如一些完全缺失的非常重要的功能,或者其他什么。例如,我不能使用一定有充分的理由。它太有用了,不能无缘无故地离开。std::vector
那么它是什么?AVR-GCC方言中的巨大漏洞是什么,使C++标准库在Arduino上无法工作?我问这个问题不仅仅是出于好奇,因为如果语言中存在巨大的漏洞,那么我需要了解它们,然后才能做出一些我没想到的未定义的行为。
答:
-3赞
MSalters
4/29/2013
#1
AVR-GCC显然是业余爱好者的作品。从本质上讲,没有人愿意承担编写标准库实现的艰苦工作。对于桌面平台来说,编写标准库并不是一件容易的事,而Arduino的有限功能只会让它变得更加困难。
评论
2赞
angelatlarge
4/30/2013
你能解释一下为什么是“业余爱好者”吗?PROGMEM
1赞
MSalters
4/30/2013
@angelatlarge:好的编译器不需要关键字。此外,好的编译器编写不会以“没有关于应该去哪里的硬性规定”结束。C 和 C++ 的语法可能会有一些歧义,但不是这种规模。语法不是模糊的。PROGMEM
3赞
angelatlarge
4/30/2013
我仍然对这种说法感到困惑:这是编译器设计不好的证据吗?怎么样?鉴于 AVR 是哈佛架构的处理器,RAM 非常少,但能够在 ROM 中存储数据(具有各种性能成本),我不确定我是否理解您关于硬性规则和模糊语法的观点。volatile
register
0赞
MSalters
4/30/2013
@angelatlarge:语法定义非常明确。当然,在很多地方它是合法的,它确实取决于你实际上声明的内容(例如,对于成员函数,它排在最后),但语法是由“硬性规则”定义的,不像 .是的,以今天的标准来看很糟糕(它被完全忽略了)。C++ 已经回收了它的表亲关键字 ,用于更有用的目的。volatile
volatile
PROGMEM
register
auto
1赞
DarthRubik
6/5/2016
@MSalters 另一件需要注意的事情是 IAR 做同样的事情......你必须为此付出代价
0赞
David Hawley
11/11/2023
#2
我刚刚在结构中使用灵活的数组(可变大小的数组)时遇到了问题。没有编译器抱怨,但它就是不起作用。我不得不更改为使用指向在结构外部定义的数组的指针。
评论