Atmel Studio 6没有针对C++的新运算符和删除运算符

Atmel Studio 6 no new and delete operators for C++

本文关键字:运算符 删除 C++ Studio Atmel      更新时间:2023-10-16

我在Atmel Studio 6中使用ATMega32 uc。我有一些包含new运算符的代码。当我尝试使用它时,它说它没有定义,我不知道为什么。

我在谷歌上搜索了一些东西,但还没有找到任何相关的东西。我所能找到的只是定义newdelete运算符的代码片段,但我真的不想这样工作。此外,nullptr丢失。

还有其他解决方案吗?

在嵌入式环境中使用动态内存管理是完全可能的,您只需要小心操作即可。在这种情况下,使用malloc()free()可能更容易,但为了提高兼容性,您可能需要将它们定义为newdelete。AVR Freaks提供了有关该主题的良好信息来源。

这些运算符不存在的原因很简单,因为AVR-GCC并不完全支持C++,只支持它的一部分。这在一定程度上是由于嵌入式编程的本质-一些更先进的C++功能可以快速吞噬闪存和RAM。嵌入式平台上的C与C++之争是一个古老而激烈的争论,但通常归结为实际情况。这是关于这个主题的另一个论坛话题。

这听起来有点嵌入的东西。这不是一个罕见的情况,你只能使用C,而不能使用C++。

无论如何,new/delete和malloc()/free()在嵌入式世界中都不是一个好主意。您的程序在任何情况下都必须工作。没有办法失败。这只是n.a。你没有控制台或日志文件来写消息,或者如果你有一些,没有人会检查它,也没有人会处理错误。您可以闪烁红色led指示灯,但在大多数情况下,这是不允许的,例如踩下制动踏板应该操作制动器,而不是红色led二极管。

您应该设置固定大小的池,而不是动态分配/取消分配项目,并且您没有不处理任何可能的输入的选项。您的代码将充满"MAX_…"定义。