ページ 11

ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 19:11
by nayo
パソコンが直ったのでまたゲーム製作を再開しようと思ったのですが
昔のプログラムを見てちょっと気になったので質問です

現在のプログラムではMyLib.hというヘッダファイル内で
#ifdef __MAIN__
	MyLib mL;
#else
	extern MyLib mL;
#endif
と記述し、Main.cppというWinMain関数があるファイル内で

#define __MAIN__

として定義をし、そのあと

#include "MyLib.h"

とヘッダファイルをインクルード、
ほかのファイル内では__MAIN__を定義せず、ヘッダファイルをインクルード、
としているのですが、どのファイルでも

#include "MyLib.h"

の宣言だけで済ませてしまいたいな、と思いました

このようなことは可能なのでしょうか
些細なことですが何か方法があればをお教えいただけたら幸いです

Re:ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 19:16
by SooA
龍神録プログラミングの館の5章で書いてくれています。

Re:ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 19:23
by SooA
> 龍神録プログラミングの館の5章で書いてくれています。
すみません。
書いてくれているのがそのやり方ですね。
最低限どの状態でアクセスされたか判別しなければ
いけないので、短く書くことはできても無くす方法は
ないと思います。

Re:ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 19:33
by 御津凪
VC++ のプロジェクト設定なら、
ファイルには __MAIN__ と書かなくても
Main.cpp のプロパティにあるマクロ設定で __MAIN__ を追加すれば可能です。

Re:ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 19:40
by nayo
お早い回答ありがとうございます

>SooAさん

なるほど、やはり無理なのですね
勉強になりました


>御津凪さん

そのような方法があったのですか
ソースを公開するつもりがないなら便利そうですね

Re:ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 22:07
by たかぎ
解決になっているので、もう用なしかもしれませんが...

> どのファイルでも
> #include "MyLib.h"
> の宣言だけで済ませてしまいたいな、と思いました
> このようなことは可能なのでしょうか

可能です。
次のようにします。
inline MyLib& get_mL()
{
  static MyLib mL;
  return mL;
}

namespace
{
  MyLib& mL = get_mL();
}
あとは、mLとして操作が可能になります。

Re:ヘッダファイルでの複数回定義の防止

Posted: 2009年4月11日(土) 23:16
by nayo
>たかぎさん

おお、このような方法があるのですか
経験の差というか、プロと私のような素人の差を感じますね
遅くなりましたがどうもありがとうございます