RSS

 

RSS


プ:#includeの整理

  • いわいまさか
  • at 2007/3/29 17:02:51

 ここで書くのは#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.cpp
~~~~~~~
#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整理をやっている。要らないヘッダーがインクルードされていることも多い。ソースに関して理解を深めることができる。ついでに、ファイル分割やクラスの構造のまずいところをチェックする。

 


  • コメント (1)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/274

コメント

私も全く同じことをやります。

「吟味」について具体的に書かれていませんが、私の場合は、.h で #include するのは .h が必要としているファイルだけ、.cpp で #include するのは .cpp で必要なファイルだけにしています。

.cpp が必要としているファイルを(.h 自身は必要ではないのに).h で #include するのは変ではないでしょうか?

  • Posted by fuzzball
  • at 2007/04/23 15:37:38