グローバル変数ファイルの宣言方法

[戻る]
muma 2002/12/16(月) 11:56:26
すみません、もう1つ質問させてください。

共通の変数と関数を一まとめに作っているのですが
それを多数のファイルから参照するにはどうしたらよいのでしょうか?

今やっている方法ですと、重複宣言になってしまいます。
通常どのようにするのでしょうか?

<現状>
"Global.h"(グローバルヘッダー)
"Global.cpp"(グローバル関数処理)
"CxxxDlg1.h"(既存ヘッダーファイル1)
"CxxxDlg1.cpp"(既存ファイル1)
"CxxxDlg2.h"(既存ヘッダーファイル2)
"CxxxDlg2.cpp"(既存ファイル2)

この4つのファイルがあって

"CxxxDlg1.cpp"(既存ファイル1)
"CxxxDlg2.cpp"(既存ファイル2)

の中で「#include "Global.h"」としています(重複宣言エラー)

どうすれば既存ファイル1と既存ファイル2から共通で同じ変数を参照できるでしょう
か?
基本的な質問なのかもしれませんがよろしくお願いいたします。

PAI 2002/12/16(月) 12:00:59
まず、設計の問題として、『グローバル変数を使うな』
というのがありますが、

外部リンケージ、内部リンケージについて正確な知識をつけておくことをおすすめします。
extern static のあたりのキーワードを調べてみてください。

PAI 2002/12/16(月) 12:02:50
ちなみに『宣言』は重複しててもかまいませんよ。
問題なのは多重『定義』です。

不良PG 2002/12/16(月) 12:03:53
#if使って一度しか読ませないようにすればよいのでは・・


(例)MFCウィザード風・・

(Global.hの先頭)
#if !defined(GLOBAL_H__INCLUDED_)
#define GLOBAL_H__INCLUDED_

(Global.hの末尾)
#endif // !defined(GLOBAL_H__INCLUDED_

tib 2002/12/16(月) 12:38:10
最近はめっきりexternなんて使わなくなりましたが、


Global.h
#if !defined(GLOBAL_H__INCLUDED_)
#define GLOBAL_H__INCLUDED_

#ifdef __DEFINE_GLOBALS__
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int global_int_variable;

#endif // (GLOBAL_H__INCLUDED_)


Global.cpp
#define __DEFINE_GLOBALS__
#include "Global.h"


CxxxDlg1.cpp
#include "Global.h"


「#pragma once」って使えるんだっけ?

joan 2002/12/16(月) 13:54:20
>「#pragma once」って使えるんだっけ?
VC6/7でコンパイル通ります。ただ、ほかのコンパイラでは使えない
と思いますが。

Visual C++.NET だと、生成されたヘッダーには
#ifdefine がなくなり #pragma once の1行のみです。

muma 2002/12/16(月) 14:12:45
[[解決]]
#ifで解決できました。
ありがとうございます。

古いスレッドには追加発言できません。