トップページ > 過去ログ > 記事閲覧
グローバル変数の定義について
名前:mouy 日時: 2008/06/13 23:54

 最近「14歳からはじめるC言語〜」で勉強をはじめました。  第8章292Pで[ボスを複数登場させるには共用グローバル変数を一ヶ所で定義する]とあります、方法がわからず「extern宣言」を使うなど自分なりに試してみたのですがうまくできません。 初歩かと思いますが教えていただけますでしょうか

Page: 1 |

Re: グローバル変数の定義について ( No.1 )
名前:L.H.@文林 日時:2008/06/21 00:59

[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型に限らずどんなものでもグローバルな変数・構造体・クラス・ポインタに出来ます。 グローバル変数は、ゲームプログラムに慣れないうちに使うとバグの温床になりますし、整備性が非常に悪くなります。 コード行数が増えてきて呼び出し回数が増えると、いつどこで呼び出されたグローバル変数が エラーの原因になっているのか分からないからです。 弊害も多く、絶対に使うなと言う人も少なからずいますし、 いずれ教科書を卒業してオリジナルでゲームを作るときにグローバル変数つかって 死ぬような思い(終わらぬデバッグ)をしたときに意味が分かると思います(^^; 長くなりましたが、これにて。 がんばってください〜ヽ(´▽`)ノ
Re: グローバル変数の定義について ( No.2 )
名前:mouy 日時:2008/06/23 00:29

 ご回答頂きありがとうございます。 L.H.@文林さんのおかげでソースの間違い個所に 気がつくことができました。

Page: 1 |