グローバル変数ファイルの宣言方法 – プログラミング – Home

グローバル変数ファイルの宣言方法
 
通知
すべてクリア

[解決済] グローバル変数ファイルの宣言方法


muma
 muma
(@muma)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

すみません、もう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
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

まず、設計の問題として、『グローバル変数を使うな』
というのがありますが、

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


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

ちなみに『宣言』は重複しててもかまいませんよ。
問題なのは多重『定義』です。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

#if使って一度しか読ませないようにすればよいのでは・・

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

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

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

最近はめっきり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
 joan
(@joan)
ゲスト
結合: 23年前
投稿: 42
 

>「#pragma once」って使えるんだっけ?
VC6/7でコンパイル通ります。ただ、ほかのコンパイラでは使えない
と思いますが。

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


返信引用
muma
 muma
(@muma)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

#ifで解決できました。
ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました