こんにちは
早速ですが質問させていただきます。
http://dixq.net/g/d_03.html
こちらのページで
>static と付けてグローバル変数を定義すると、そのファイル内でのみ使用出来るグローバル変数になります。
とあります。
そのようにして定義したファイル内のグローバル変数を他のファイルで参照にするにはどうしたら良いのでしょうか?
具体的にはplayerのファイルで定義したプレイヤーに関する値を持つ構造体、
static Player_t m_Player[NUM];
を他のファイルで参照にしたく思っています。
以上よろしくお願いします。
ファイル内のグローバル変数の参照の仕方について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイル内のグローバル変数の参照の仕方について
staticにワザワザしてあるので参照可能にするのは、プログラムコード的には悪い設計となります。
つまり、グローバル参照可能で書き換え可能な状態は、あちこちで使うことで修正時の手間が増え、書き換えの場所が多いことからバグの原因となり、バグの原因を掴みづらくする悪い事なのです。
staticを外しcppではPlayer_t m_Player[NUM];と書いておきヘッダファイルにextern Player_t m_Player[NUM];と記述すればグローバル変数となり、何処からでも参照と書き換えが可能となります。ただし、先にも行った通り良くない設計です。
つまり、グローバル参照可能で書き換え可能な状態は、あちこちで使うことで修正時の手間が増え、書き換えの場所が多いことからバグの原因となり、バグの原因を掴みづらくする悪い事なのです。
staticを外しcppではPlayer_t m_Player[NUM];と書いておきヘッダファイルにextern Player_t m_Player[NUM];と記述すればグローバル変数となり、何処からでも参照と書き換えが可能となります。ただし、先にも行った通り良くない設計です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
とっしー
Re: ファイル内のグローバル変数の参照の仕方について
softya様
ご返信ありがとうございます。
なるほど普通のグローバル変数にしてしまえばいいのですね。
ただグローバル変数はあまり良くないみたいなことをよく見るのであまり使いたくありません。
私はplayer.cpp以外のファイルでplayerの値を書き変えたいのではなく、参照にしたいだけです。
そのような場合でもグローバル変数を使わなくてはならないのでしょうか?
他のゲームでもプレイヤーの値(位置や向きなど)をplayer.cpp以外のファイルで参照にすることはよくあると思います。
そのようなときは通常どのようにするものなのでしょうか?
お手数おかけしますが以上よろしくお願いします。
ご返信ありがとうございます。
なるほど普通のグローバル変数にしてしまえばいいのですね。
ただグローバル変数はあまり良くないみたいなことをよく見るのであまり使いたくありません。
私はplayer.cpp以外のファイルでplayerの値を書き変えたいのではなく、参照にしたいだけです。
そのような場合でもグローバル変数を使わなくてはならないのでしょうか?
他のゲームでもプレイヤーの値(位置や向きなど)をplayer.cpp以外のファイルで参照にすることはよくあると思います。
そのようなときは通常どのようにするものなのでしょうか?
お手数おかけしますが以上よろしくお願いします。
Re: ファイル内のグローバル変数の参照の仕方について
構造体の中身を公開せずに、構造体の中身を変更したり参照したりするための関数を公開するのが設計としては優れています。
いわゆるクラス(オブジェクト)のメソッドのようなものです。
いわゆるクラス(オブジェクト)のメソッドのようなものです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイル内のグローバル変数の参照の仕方について
そうですね。座標や向きだけ返す関数をそれぞれ作れば良いと思います。
そうすれば変更もできませんし、他の構造体の部分を公開する事もありません。
そうすれば変更もできませんし、他の構造体の部分を公開する事もありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
とっしー
Re: ファイル内のグローバル変数の参照の仕方について
ISLe様、softya様
ご返信ありがとうございます。
確かに関数を作ってしまえば大丈夫そうですね。
ありがとうございます。
参考までにお伺いしたいのですが、クラスというワードが出て来ましたが、
こういった時はC++を使えばもっとスマートに解決できるのでしょうか?
私はC言語しか使えませんが、もしC++を使えば解決できるというのならば
C++にも手を出してみようと思います。
度々すいません。
以上よろしくお願いします。
ご返信ありがとうございます。
確かに関数を作ってしまえば大丈夫そうですね。
ありがとうございます。
参考までにお伺いしたいのですが、クラスというワードが出て来ましたが、
こういった時はC++を使えばもっとスマートに解決できるのでしょうか?
私はC言語しか使えませんが、もしC++を使えば解決できるというのならば
C++にも手を出してみようと思います。
度々すいません。
以上よろしくお願いします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイル内のグローバル変数の参照の仕方について
この問題はC++でも同じです。スマートに成るのはもっと別の部分です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
とっしー
Re: ファイル内のグローバル変数の参照の仕方について
softya様
ご返信ありがとうございます。
そうなんですか。勉強不足ですいません。
とりあえずC言語で進めて行きたいと思います。
色々とアドバイスいただきありがとうございました。
また何かありましたらよろしくお願いします。
ご返信ありがとうございます。
そうなんですか。勉強不足ですいません。
とりあえずC言語で進めて行きたいと思います。
色々とアドバイスいただきありがとうございました。
また何かありましたらよろしくお願いします。