ここで書くのは#include整理のススメ。
ソースの改造・メンテ時には#include整理を行ってみては?
■手順
(a) 目的のソースから#includeを全て削除。
(b) コンパイルしてみる。
(c) エラーが出たら対応ヘッダーをインクルード。
(d)エラーが出なくなるまで(b)、(c)を繰り返す。
以下は実際に行った例、 デモアプリのひとつのソースdm_mve_3d_fa.cppに関して。
■元ソース
~~~~~~~
#include <stdio.h>
#include <string.h>
#include "dmshi_gt.h"
#include "dmshi_peri.h"
#include "dm_cmn.h"
#include "dm_mve_3d_fa.h"
#include "dm_vol.h"
#include "dm_se.h"
#include "dmshi_math.h"
~~~~~~~
■削除してコンパイル
~~~~~~~
エラー: undefined identifier 'Char8'
dm_mve_3d_fa.cpp 行: 66 Char8 *fa_movie_fname = {
エラー: undefined identifier 'DmShiRectF'
dm_mve_3d_fa.cpp 行: 70 DmShiRectF fa_collision = {
エラー: undefined identifier 'MVE_3D_FA_ROOT_DIR'
dm_mve_3d_fa.cpp 行: 75 MVE_3D_FA_ROOT_DIR"migi48.wav",
エラー: undefined identifier 'MVE_3D_FA_ROOT_DIR'
dm_mve_3d_fa.cpp 行: 76 MVE_3D_FA_ROOT_DIR"hidari48.wav",
~~~~~~~
■エラーを解決すべく#includeを追加
dm_mve_3d_fa.h
~~~~~~~
#include "dm_cmn.h"
#include "dm_sfd.h"
~~~~~~~
dm_mve_3d_fa.cp
p
~~~~~~~
#include "dm_mve_3d_fa.h"
#include <stdio.h>
#include "dm_se.h"
#include "dm_vol.h"
#include "dmshi_math.h"
~~~~~~~
11個あったインクルードが3+5=8個になった。
■#includeを書くファイルの吟味
#includeの記述をすべてdm_mve_3d_fa.cppに入れてもエラーは解決できる。だが、上の例では吟味して、部分的にdm_mve_3d_fa.hに回している。つまり、dm_mve_3d_fa.cppだけでなくdm_mve_3d_fa.hにも必要なヘッダーはそこにインクルードしている。
■関連事項
・ソースはいじってやることが大切。
・必要なものだけインクルードするのが良い。
■方針
過去のソースや他人のソースをいじる必要があるときは、この#include整理をやっている。要らないヘッダーがインクルードされていることも多い。ソースに関して理解を深めることができる。ついでに、ファイル分割やクラスの構造のまずいところをチェックする。
私も全く同じことをやります。
「吟味」について具体的に書かれていませんが、私の場合は、.h で #include するのは .h が必要としているファイルだけ、.cpp で #include するのは .cpp で必要なファイルだけにしています。
.cpp が必要としているファイルを(.h 自身は必要ではないのに).h で #include するのは変ではないでしょうか?