Release 2017.2.15 / Update 2017.5.27

スケッチがコンパイルできない時 1 関数の順番

未だに原因が分からないのですが、ArduinoIDE上で「間違っていないスケッチ」でもコンパイルできない時があります。なぜ間違っていないかが分かるのかというと、「以前は普通にコンパイル出来たスケッチ」だからです。

タブを作って関数を整理してるようなスケッチ、あるいは以前書いたスケッチの中から、進行中のスケッチへ関数をコピペする時に多いような気がします。

エラー表示

IDEに赤文字で出る警告では「関数が定義されていない」と。試行錯誤の末に出来てから「完成フォルダ」にまとめているプロジェクトファイルなので、そんなハズはないんですけど…。何時からかはハッキリしませんが、どうもIDEをバージョンアップしてからそういう症状が出てくるようになりました。

対応策

そのエラーが出てしまったら、もうバグだろうと諦めて作り直していたんですけど、ある日、単純に順番を変えることで回避できることを知りました。

関数内で使う関数は前に

よく見るスケッチサンプルって「変数などの定義」→「Setup関数」→「loop関数」→「その他自作した関数」という順番で書かれているものが多かったので、自分もそれに倣って書いていました。

例えばHOP()、STEP()、JAMP()みたいな関数を作ったとします。今までの書き方から行くと、

これで今まで問題なくコンパイル出来ていましたが、あるバージョンから使う関数を先に置かないと弾くようになったみたいです。つまり、

という感じに並べ直します。参照する関数を先に書いておく並びです。

#define定数や、変数は使う前に定義しておかないとエラーなのは当たり前でしたけど、関数に関しては結構ざっくばらんな感じでした。でも、その関数でさえ同様な仕様で書いておかないと問題になってくる場合があるようです。元々こう書くのが常識なのかは分かりません。ひとつ言えるのは、これが要因でコンパイルが「出来る」時と「出来ない」時があるということです。「出来る」場合があるっていうのが厄介です。

ちなみにIDE上で便利なタブ機能も、左タブから順に書かれるのと同じことなので気をつける必要があります。

ともあれ、これで「ダメだ」と思っていたスケッチも復活できますし、単なる順番だけの話なので、「こういうもんだ」と書き方に慣れていけばいいだけなんですが。

ここでのサンプルスケッチは一応動作確認をしてから公表しているつもりですが、こんな理由で環境によっては弾かれている方もいるかもしれません。もしこのサイト上のスケッチがうまく動作しないのであれば、この原因も考えられるので、関数の順番を入れ替えてみてください。またコメントに残していただければ幸いです。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA