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文を書くとエラーになってしまいます。
No.1ベストアンサー
- 回答日時:
実体を定義せず、参照だけ定義する場合は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; /*参照定義*/
No.2
- 回答日時:
普通は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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- その他(プログラミング・Web制作) python fbprophetについて 1 2022/09/29 19:44
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Visual Basic(VBA) vbaサブフォルダーをワイルドカードで取得したい 2 2022/11/15 08:04
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) セルの値からファイルを複数作りたい 2 2022/10/06 12:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
分割コンパイルの#defineについて
-
csvファイルを開かずに文字を検...
-
iniファイルに追記がしたいです。
-
ドラッグアンドドロップでファ...
-
テキストファイルの最終行を削...
-
Cでのネットワークファイルの読...
-
SGファイルって何ですか?
-
VBAにてEXCEL以外のファイル(テ...
-
大きいサイズのテキストファイ...
-
C言語のfopenについて教えてく...
-
UNICODE文字が書き込めるWritep...
-
グローバル変数のよくない使い...
-
C#で、フォームのタイトル名を...
-
string.h とかって何?
-
ファイルを開かずにカスタムド...
-
マスタとファイルの違いって?
-
WAVファイル同士の結合が可...
-
ファイルダイアログでのファイ...
-
ファイル読み書き方法について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
Javascript で INI の読み書き
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報