[hoge.h]
#include "stdio.h"
extern int x; //int x;がソースのどこかで定義されますよ、と宣言
void a();
void b();
[main.cpp]
#include "hoge.h" //グローバル変数を使いたいソースは全てhoge.hをインクルードする
int x=10; //関数の外で定義する。これでxはグローバル変数になった。
int main(){
a();
x=200;
printf("%d\n",x); //xの中身の表示(3回目)
return 0;
}
[a.cpp]
#include "hoge.h"
void a(){
printf("%d\n",x); //xの中身の表示(1回目)
b();
}
[b.cpp]
#include "hoge.h"
void b(){
x=100;
printf("%d\n",x); //xの中身の表示(2回目)
}
(実行結果)
10
100
200
となるはずです。
ヘッダでextern宣言して、更にソースの一番外側(関数の外)で定義します。
眠い頭なのでサンプル間違っていたらすいません(^^;
上手くいかないとありますが、ヘッダで
extern int hoge;
と書いて、ソース内ではそのまま
hoge = 100;
と使ってるんじゃないかと予想します。
extern宣言はあくまでも『あとで定義されますよ、と宣言している』だけで、
実際には定義されていないことに注意して下さい。
また、定義する場所も、func(){ }の中ではローカル変数としての定義になって
しまうので、ちゃんと関数の外側で定義してください。
int型に限らずどんなものでもグローバルな変数・構造体・クラス・ポインタに出来ます。
グローバル変数は、ゲームプログラムに慣れないうちに使うとバグの温床になりますし、整備性が非常に悪くなります。
コード行数が増えてきて呼び出し回数が増えると、いつどこで呼び出されたグローバル変数が
エラーの原因になっているのか分からないからです。
弊害も多く、絶対に使うなと言う人も少なからずいますし、
いずれ教科書を卒業してオリジナルでゲームを作るときにグローバル変数つかって
死ぬような思い(終わらぬデバッグ)をしたときに意味が分かると思います(^^;
長くなりましたが、これにて。
がんばってください〜ヽ(´▽`)ノ