分解コンパイルの方法

ソースが長くなってくると分割したくなる。
分割に必要な情報とは何か説明する。

  1. 分割したいものは何か
    めちゃめちゃ長い変数の初期化部分
    細かく分割された関数群
  2. なぜ分割したいのか?
    変数を参照するのにソースを行ったり来たりで見通しが効かない
    関数を参照するのにソースを言ったり来たりで見通しが効かない
    ある程度、ソースを作っていて、イラっときた時が分割のタイミング
  3. ますヘッダファイルを作るべし

    ちゃんと拡張子の.hまで入力すること
  4. 退避させる全ての変数に extern を付けてヘッダファイルへコピペ
    退避させる全ての関数のプロトタイプ宣言に extern を付けてヘッダファイルへコピペ
  5. これだけだとコンパイラが変数を作ってくれないので(使う予定であることだけは理解してくれている)、適当なファイル(どこでも良いけど.inoが最適)で初期化する

    これをやらないと、コンパイラから変数が定義されていないって怒られる
  6. 関数の実態は適当なファイル名で同じディレクトリへ置けば自動的にコンパイルしてくれる
  7. 分割した変数や関数を使うファイルの先頭でヘッダファイルをインクルード
  8. ソース・ファイル分割のまとめ
    とにかくヘッダファイルを作り、そこへ変数と関数のプロトタイプ宣言を詰め込む。externも忘れずに
    変数はどこかで初期化が必要
    関数は適当なcppファイルに書いておけばOK

追加1 ライブラリとクラスの扱い (ResKeypadの例)

  1. ヘッダファイルでライブラリのヘッダファイルをinclude、extern でクラスとインスタンスを書く (引数は省略する)
  2. inoの中でインスタンスを生成する

追加2 .inoに変数の初期化を入れていたら長くなってきた! 別ファイルにしたい!

  • 変数の初期化専用のcppファイルを作る→ init.cpp など
  • init.cppファイルの先頭で、変数の extern をしてあるヘッダファイルをinclude
  • init.cppの中で変数を初期化

追加3 今まで正常に分割コンパイル出来ていたのに急にエラーが出た!

  • 一時的に違うボードを選んでコンパイルする→ビルドオプションが変更されて全ソースに再コンパイルがかかる
  • 元のボードに戻す