2012/02/27

Arduino小知識:enum與函式

之前的Arduino練習:Simon Says請你跟我這樣做,我發現一件事情,記錄如下。

一支很簡單的程式,居然無法通過編譯(在Arduino軟體開發環境下)。

typedef enum{
  Foo_E0,
  Foo_E1,
  Foo_E2,
} FooEnum;

void bar(FooEnum fe){
}

void setup(){
}

void loop(){
}

錯誤訊息:
Test:-1: error: variable or field 'bar' declared void
Test:-1: error: 'FooEnum' was not declared in this scope

什麼跟什麼啊?看不懂。

函式若以enum為參數,或是回傳型別為enum,都會出現此問題。

不過,如果我自己在cygwin命令列模式下進行編譯,則不會有問題。

上網搜尋後,在Arduino Playground發現這篇,How can I use enums as function returntypes or as parameters to functions?

大意是說,Arduino軟體開發環境在把程式檔交給編譯器之前,會在先進行一些"處理",其中一項是找出函式並加以宣告放到最前面,於是會造成上述的問題,總之,解決方法就是把enum的定義,搬到另一支.h檔,然後在.ino檔include那支.h檔,這樣就可解決了。

可以參考這一份文件,解說Arduino軟體開發環境的建置過程。

No comments:

Post a Comment