いちばんやさしいゲームの作り方

文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ

ヘッダファイルは、ある *.cpp が持っている関数や型を、他のファイルから使えるようにするために *.cpp の概要を外部へ公開する名刺のようなファイルです。

ヘッダファイルは *.cpp ファイルに対してひとつ *.h という形で作りますが、その内容として次のような情報を記述します。

  • その *.cpp が外部に対してどんな型を提供しているか?
  • その *.cpp が外部に対してどんな関数を提供しているか?
  • #include ガード

その *.cpp が外部に対してどんな型を提供しているか?

*.cpp が外部に公開している型を他のファイルに教えるための記述です。 class や typedef や enum などを書くことができます。

// 構造体の定義
typedef struct {
  // …
} SampleStructure;

// クラスの定義
class SampleClass
{
  // …
}

// 列挙型の定義
typedef enum {
  // …
} SampleEnum;

その *.cpp が外部に対してどんな関数を提供しているか?

*.cpp が外部に公開している関数を他のファイルに教えるための記述です。他のファイルからはこの *.h ファイルを #include することで *.cpp が提供している関数を使うことができるようになります。関数を外部に公開するためには、関数の名前・引数・戻り値を次のように記述します。

void InitializePlayer(HWND hWindow, HDC hBackBuffer);
void FinalizePlayer(HWND hWindow, HDC hBackBuffer);
void UpdatePlayer(HWND hWindow, HDC hBackBuffer);
void DrawPlayer(HWND hWindow, HDC hBackBuffer);

#include ガード

同じ *.h ファイルを2回以上 #include してしまうと「同じ関数名が使われています」というようなエラーになってしまいます。これを回避するために #include ガードを記述します。

#ifndef SAMPLE_HEADER_INCLUDED__

#define SAMPLE_HEADER_INCLUDED__


// ここにヘッダファイルの中身を書きます

#endif

#include ガードは任意の文字列(前述の例では SAMPLE_HEADER_INCLUDED__ )を用いて、「その文字列が初めて使われるか?」「すでに使われていないか?」を検証し、初めて使われている場合は *.h ファイルをインクルードし、すでに使われている場合は #include をスキップするようにします。これによって同じ *.h ファイルが2回以上 #include されないようになります。任意の文字列(前述の例では SAMPLE_HEADER_INCLUDED__ )は好きな文字列を指定することができますが、ファイルごとに違う文字列を指定する必要があります。また、アンダーバーで始まる名前は使用できません。

完全なヘッダファイルの例

#ifndef SAMPLE_HEADER_INCLUDED__

#define SAMPLE_HEADER_INCLUDED__


// 型を定義する例
typedef struct {
  int x;
  int y;
  int width;
  int height;
  int life;
} Player, *pPlayer;

// 関数を定義する例
void InitializePlayer(HWND hWindow, HDC hBackBuffer);
void FinalizePlayer(HWND hWindow, HDC hBackBuffer);
void UpdatePlayer(HWND hWindow, HDC hBackBuffer);
void DrawPlayer(HWND hWindow, HDC hBackBuffer);

#endif

Contributions




Trackback URL

メルマガ登録・解除
 
挫折不可能!初級ゲームプログラミング完全マニュアル
RSS track feedいちばんやさしいゲームの作り方 TECHNORATI お気に入りに追加する
フィードメーター - いちばんやさしいゲームの作り方 ブログSEO対策:track word カウンター
Firefox meter あわせて読みたい SEO STATUS
このページの先頭へ