跟进 这条评论 从问题中 写入固件:组装还是高级?:

当编译 C++ 代码时 Arduino 平台,可以使用虚函数、异常等吗?或者您想要(必须)使用 C++ 的子集(如中所述 评论)?

为 Arduino 平台编程时还有其他注意事项吗?

有帮助吗?

解决方案

在Arduino的环境使用GCC工具链的AVR版本。该代码被编译为C ++,所以你可以使用类。虚拟函数是可能的;该虚函数表将被存储在.data段,并有正确的地址。事实上,打印基类使用虚拟功能的各种“打印”方法,以适应不同的输出类型。

例外不因为代码空间的原因支撑。 Arduino的环境通过“-fno-例外”到编译器命令行。请参见对于此验证

模板的支持。例如,此无成本流插入操作者的技术使用简单的模板和内联操作者工作正常。

其他提示

Arduino软件使用avr-海湾合作委员会汇编的草图。以下限制了来自 avrlibc常见问题(我可以使用C++在AVR?):

支持

  • 虚拟的功能
  • 构造和析构(包括全球的人)

不支持

  • C++标准的功能、类和模板类(但是参看 这个港口uClibc++Arduino)
  • 运营商 newdelete (试图使用它们会引起连接抱怨不确定的外部参考文献)。这意味着,对象只能建立在栈。如果动态存储器的分配方式是要求它必须实施使用 malloc()free()C 类型
  • 例外情况。由于例外的默认情况下启用C++前端,他们明确需要关闭时使用 -fno-exceptions 在编译器的选择。这是自动完成的Arduino IDE当它启动 avr-gcc

其他问题

  • 一些提供包括文件不是用C++安全,即他们需要的是包裹着
    extern "C" { . . . }

的特征的可用性不受平台限制,而所使用的编译器。

我会检查所支持的语言功能编译器的文档。

科莫计算具有C ++ C编译器,它支持所有的C ++特性。不只是虚函数,或例外,而且外销。你会需要调用科莫得到它的目标Arduino语言,而是应该不是太难。

文档说:

  

Arduino语言是基于C / C ++,并支持所有标准C构建体和一些C ++特性。

这并不是说对,我可以找到虚函数什么。

我尝试一个简单的程序,它编译罚款。我没有测试它在Arduino硬件虽然。

编辑:我还没有测试的例外

我使用 g++ 与 这个生成文件 并开始于 这段代码. 。C++浪费了一些空间。但原型线程太酷了,不能不使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top