プロが教える店舗&オフィスのセキュリティ対策術

C++のプログラミングに関する質問です。
visual studio2008を使用しています。

手元に非常に複雑なC++ファイルなどから構成されている1つのprojectがあります。(ヘッダファイルなどもあります)
そのため、このprojectをデバッグすると、A.cppファイルをデバッグ→B.cppファイルをデバッグ→A.cppファイルをデバッグ→C.cppファイルをデバッグのように、色々なcppファイルを跨ってデバッグします。
1つのcppファイルには大量の関数があり、cppファイルの先頭や,関数外の部分に例えばA.cppで
int test
などと宣言すれば、A.cppファイル内ではtestと名付けた変数をすべての関数で使えます。
しかし、あくまでA.cppファイル内だけで使用できるだけで、別のBやC.cpp内で使うことはできません。

このtest変数をB.cppやC.cppファイルでも使えるようにするにはどうすればいいでしょうか?
上で挙げた例でいうなら、A.cppからB.cppファイルに移動する際の関数の引数として渡す方法は考えられますが、実際には、
test変数を使いたいのはかなり後に登場するcppファイルで関数の引数として扱うのは非常に大変です。
(Z.cppでtest変数を使いたい。しかしZ.cppに到達するまでにはA~Y.cppを通り、その間に登場するすべての関数でtestを引数にしなければならない)
関数の引数でtest変数を使えるようにする以外の方法がありましたたら教えていただけると幸いです。

実際にやりたいことは
A.cpp内にある関数が実行されたらその数をカウントし(A.cppのこの関数は何度も呼び出される関数) //count ++
このcount++の値によってZファイルのある関数での動作を変えたいと思っています。
if(count<100){
printf("aaa");
}
しかし、現状ではZ.cppファイル内ではcountが定義されていないので上のようなif文を書くとエラーになってしまいます。

A 回答 (2件)

実体を定義せず、参照だけ定義する場合はexternを使用する。



A.cpp
int count = 0; /*実体定義*/
extern char ch_value; /*参照定義*/

B.cpp
extern int count; /*参照定義*/
char ch_value = '\0'; /*実体定義*/

C.cpp
extern int count; /*参照定義*/
extern char ch_value; /*参照定義*/
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
非常に助かりました。

お礼日時:2012/02/01 19:21

普通はA.hというファイルを作り、その中で extern int test ; を宣言しておく。


A.cppの中では int test ; を記述しておく。

test を使用したいファイルの初めの方で #include "A.h" を宣言しておくとそのファイル内で test を参照できるようになります。
なぜこうしておくかというと、 extern int test ; の int を long に変えたい時などにA.hファイルの中だけの修正すれば済むからです。
個々のファイルで extern int test ; を記述してあると全てのファイルを修正する必要が有ります。

なお、A.h を間違えて複数回 include すると不具合が生じる場合もあるので、不具合を避けるおまじないをしておきます。
A.h の中身の例として挙げておきます。

/* file = "A.h" */
#ifndef DEF_A_H
#define DEF_A_H

extern int test ; // グローバル変数

#endif
    • good
    • 0
この回答へのお礼

ヘッダファイルでexternを宣言して使う場合もあるんですね。
ご丁寧にありがとうございました。

お礼日時:2012/02/01 19:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!