ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2016年6月20日月曜日

Arduinoで構造体を使う

Arduinoで構造体を使う方法、ということで調べると、普通に使うなら別に問題なく使えるが、関数の戻り値や引数としてはヘッダファイルがないとダメだ、というような話が出てくる。しかしこれは少し間違いがあり、現在の最新Ver(16/6/20現在で1.6.9)を使っている限りは、何も考えずに構造体を宣言してC++のように型名と同じくそのまま利用すれば、何の問題も起きない。

ただ少し前のVerでは、(C言語でやるように)構造体にtypedefを使ってstructを省略しようとした場合、戻り値や引数で、コンパイルが通らないという、おそらくバグと思われる挙動があり(もともとArduinoはC++のすべての機能を使ええるわけではないとリファレンスなどには書かれている)、先に関数の宣言を書いたりしないとうまくいかない。

ちなみにヘッダファイルを使わなくとも、ワンファイルで解決する方法として単純にtypedefを使わない場合のC言語と同じように書くという方法がある。
struct RGB hoge(struct RGB rgb){
という感じだ。単純にtypedefを使わないC言語のときのように、構造体の利用時は構造体名の前にstructをつけるというルールに従いさえすれば、問題ない。