■2重インクルードの防止
#ifdefとかを使って2重インクルードを防止する必要があるらしい。
要調査。
また、ソースファイルではなく、ヘッダファイルで読み込むようにしたほうがいいらしい。
なんでだろ・・?
■構造体のオーバヘッド解消
関数の引数に構造体を指定するとオーバヘッドが大きくなるので、
構造体を引数とするときは、できるだけポインタを使用してアドレスだけを渡すようにする。
■構造体のアクセス
構造体にTOPレベルからアクセスすると、アドレスの計算が何度も行われるので非効率。
何度も使う深いレベルの変数は、別の変数に一時的に格納するか、アドレスをポインタに代入してポインタ経由でアクセスするようにする。
■2重インクルードの防止
これって
#ifdef XXXXX_XXXX_XXXX
~
#endif
の話じゃないのかなぁ…。
VCでクラスを作るとヘッダファイルに必ず作成されるのよね。
XXXXX_XXXX_XXXXの部分をヘッダファイル毎に違うものに
しておくとよいのです。
ごんべ様提供の情報をもとに、軽く調べてみたけど、
ヘッダファイル側にて
#ifndef マクロ名
#define マクロ名
ヘッダの内容
#endif
みたいにしておけば、その時点でヘッダファイルがインクルードされてなければ、インクルードするし、既にインクルードされていれば、インクルードしない。
という動作をするので多重インクルードが防止できるみたいっすね。
2重インクルードぐらいコンパイラ側で自動的に防止してくれても良さそうなもんだが・・・・。
他の方法はないものか。
■なぜ多重インクルードを防止するのか
最大の理由は「コンパイルが遅くなる」。
多重インクルードしているとヘッダの一部に変更を加えただけでも、関係するファイルとのリンクを全てコンパイルしないとダメらしく、異常にコンパイル速度が遅くなる。
これは、ゲーム開発などの大規模プログラミングでは作業効率が落ちるので致命的。
だから、多重インクルードしないようにうるさく言われるのか・・・。