龍神録の5章についての疑問
Posted: 2010年11月11日(木) 18:52
初めまして、seaviewと申します。
現在、龍神録のサイトで学習しているのですが、5章を読み終えて、疑問に思ったことがあります。
5章「宣言の仕方を工夫しよう」でいくつか疑問に思ったことがあります。
(5章→http://dixq.net/rp/5.html)
まず一つは、
5章の例の場合では、main.cppで
#define GLOBAL_INSTANCE
をし、次にGV.hをincludeすることによって、グローバル変数の実体を定義している、ということですよね。
main.cppのみグローバルインスタンスをdefineすることで、他のファイルでは、こういう変数があるよという
ことを宣言するものとして扱うことができる、ということですよね。
そこで思うのですが、グローバル変数をmain.cpp内で定義しなくてはならないのは、なぜなのでしょうか?
それについて私が思ったことは、グローバル変数の実体を確保するためだけのcppファイルを用意する、という
方法です。
(http://oshiete.goo.ne.jp/qa/1346136.html
↑ここの回答No.2を参考にしてます)
5章冒頭で、
「・変数の宣言はメインファイルmain.cppで行う必要がある。」
とありましたが、これがどうしてなのか?という旨で違いないと思います。
そして、main.cppで定義しなくてはいけないとすると、
先ほどのリンク先の回答No.2の方法では、
main.cpp以外である別のファイルでやってるようですが、
一体どういうことなのでしょうか??
また、同じくGV.hでインクルードされているfunction.h内では関数にGLOBALがついていますよね。
関数のプロトタイプ宣言のとき、externがついても、ついてなくても、externが付いているのと同じ、
ということを聞きました。
なので、このfunction.h内の関数のプロトタイプ宣言についているGLOBALというのは、
GLOBAL、またはextern、または空白でもよい、ということでいいのでしょうか?
初歩的な質問で申し訳ありません。。。過去ログさがしてみたり、googleでも検索してみたのですが、
いまいち、よくわかりませんでした・・、
ちなみに、私のC言語のスキルはまだC言語入門書を1冊読破した程度であり、
分割コンパイルやライブラリ作成の知識は浅いです。
そんなわけですが、ご回答よろしくお願いいたしますm(__)m
現在、龍神録のサイトで学習しているのですが、5章を読み終えて、疑問に思ったことがあります。
5章「宣言の仕方を工夫しよう」でいくつか疑問に思ったことがあります。
(5章→http://dixq.net/rp/5.html)
まず一つは、
5章の例の場合では、main.cppで
#define GLOBAL_INSTANCE
をし、次にGV.hをincludeすることによって、グローバル変数の実体を定義している、ということですよね。
main.cppのみグローバルインスタンスをdefineすることで、他のファイルでは、こういう変数があるよという
ことを宣言するものとして扱うことができる、ということですよね。
そこで思うのですが、グローバル変数をmain.cpp内で定義しなくてはならないのは、なぜなのでしょうか?
それについて私が思ったことは、グローバル変数の実体を確保するためだけのcppファイルを用意する、という
方法です。
(http://oshiete.goo.ne.jp/qa/1346136.html
↑ここの回答No.2を参考にしてます)
5章冒頭で、
「・変数の宣言はメインファイルmain.cppで行う必要がある。」
とありましたが、これがどうしてなのか?という旨で違いないと思います。
そして、main.cppで定義しなくてはいけないとすると、
先ほどのリンク先の回答No.2の方法では、
main.cpp以外である別のファイルでやってるようですが、
一体どういうことなのでしょうか??
また、同じくGV.hでインクルードされているfunction.h内では関数にGLOBALがついていますよね。
関数のプロトタイプ宣言のとき、externがついても、ついてなくても、externが付いているのと同じ、
ということを聞きました。
なので、このfunction.h内の関数のプロトタイプ宣言についているGLOBALというのは、
GLOBAL、またはextern、または空白でもよい、ということでいいのでしょうか?
初歩的な質問で申し訳ありません。。。過去ログさがしてみたり、googleでも検索してみたのですが、
いまいち、よくわかりませんでした・・、
ちなみに、私のC言語のスキルはまだC言語入門書を1冊読破した程度であり、
分割コンパイルやライブラリ作成の知識は浅いです。
そんなわけですが、ご回答よろしくお願いいたしますm(__)m
