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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nayo

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

#1

投稿記事 by nayo » 16年前

パソコンが直ったのでまたゲーム製作を再開しようと思ったのですが
昔のプログラムを見てちょっと気になったので質問です

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

#define __MAIN__

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

#include "MyLib.h"

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

#include "MyLib.h"

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

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

SooA

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

#2

投稿記事 by SooA » 16年前

龍神録プログラミングの館の5章で書いてくれています。

SooA

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

#3

投稿記事 by SooA » 16年前

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

御津凪

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

#4

投稿記事 by 御津凪 » 16年前

VC++ のプロジェクト設定なら、
ファイルには __MAIN__ と書かなくても
Main.cpp のプロパティにあるマクロ設定で __MAIN__ を追加すれば可能です。

nayo

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

#5

投稿記事 by nayo » 16年前

お早い回答ありがとうございます

>SooAさん

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


>御津凪さん

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

たかぎ

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

#6

投稿記事 by たかぎ » 16年前

解決になっているので、もう用なしかもしれませんが...

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

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

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

nayo

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

#7

投稿記事 by nayo » 16年前

>たかぎさん

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

閉鎖

“C言語何でも質問掲示板” へ戻る