[c++] Arduino C ++代碼:你可以使用虛函數和異常嗎?



Answers

Arduino軟件使用avr-gcc編寫草圖。 以下限制源自avrlibc常見問題解答(可以在AVR上使用C ++嗎?)

支持的

  • 虛擬功能
  • 構造函數和析構函數(包括全局函數)

不支持

  • C ++標準函數,類和模板類(但可以參見uClibc ++ for Arduino的這個端口
  • 運算符newdelete (嘗試使用它們將導致鏈接器抱怨未定義的外部引用)。 這意味著對像只能在堆棧上創建。 如果需要動態內存分配,則必須使用C類型的malloc()free()來實現
  • 例外。 由於C ++前端默認啟用了-fno-exceptions ,所以在編譯器選項中顯式地需要使用-fno-exceptions關閉-fno-exceptions 。 這是由Arduino IDE在啟動avr-gcc時自動完成的

其他事宜

  • 一些提供的包含文件不是C ++安全的,即它們需要被封裝
    extern "C" { . . . }
Question

從這個問題寫下固件:程序集還是高級?

編譯Arduino平台的C ++代碼時,可以使用虛函數,異常等嗎? 或者你想(必須)使用C ++的子集(如評論所述 )?

在編寫Arduino平台時有什麼其他的注意事項?




該文件說:

Arduino語言基於C / C ++,支持所有標準C語言結構和一些C ++特性。

它沒有說我能找到的任何有關虛擬功能的東西。

我試了一個簡單的程序,它編譯好。 我還沒有在Arduino硬件上測試過它。

編輯:我也沒有測試例外。




Comeau計算有一個支持所有C ++特性的C ++ to C編譯器。 不僅僅是虛函數或者異常,而且還有導出。 你需要給Comeau打個電話,讓它指向Arduino語言,但不應該太難。




Related