とても初歩的なことなのですが・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
aix

とても初歩的なことなのですが・・・

#1

投稿記事 by aix » 13年前

5、宣言の仕方を工夫しようのところで、最後に書いてある「後は「main.cpp」「graph.cpp」「load.cpp」にある変数の定義部と、extern宣言を全て消してください。」とはどこをけせばいいのですか・・・そもそも定義部って?って感じです・・・定義してる場所ってことはわかりますけどコード上でどこを指すのか細かいことがわかりません・・・教えてください。

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

Re: とても初歩的なことなのですが・・・

#2

投稿記事 by jay » 13年前

え~と、龍神録の館の事ですよね?
そう言うところはちゃんと書いておいて下さいね~

さて、本題ですが
変数の定義部が何かといいますと「変数を定義している所が定義部」です
分かりませんか? つまり特にココ! って決められている訳ではないのです

もう少し具体的にお話しますと
第4章ではimg_chという配列をmain.cppで
int img_ch[2][12];
と"定義"していますよね?

もし宣言が何なのか、さえ理解できていないのならC言語の入門書等でお勉強してください
そのレベルだったら龍神録の館の仕様を理解するのは厳しいです

お話を戻しますが
img_chはmain.cppで宣言されているので、それを使えるのは当然main.cppの中でだけです
でも画像を描画するためにはgraph.cppでも使えないと困りますよね?
そこでgraph.cppでは
extern int img_ch[2][12];
と、「他のファイルにあるimg_ch[2][12]という配列を使います」と"宣言"している訳です

でもこのやり方だと敵の構造体とか弾とか背景とか、制御するのが色々出て来た時に大変だから一箇所にスッキリ纏めましょう
というのが第5章ですね

そう言う訳で「main.cpp」「graph.cpp」「load.cpp」にある変数を"定義"している所と"宣言"している所を消せばOKです
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: とても初歩的なことなのですが・・・

#3

投稿記事 by beatle » 13年前

jayさんの書き込みの補足ですが、宣言と定義は次の使い分けがあります。
宣言:メモリ領域は確保されない。extern宣言は、どこか他の場所にその変数がある、と知らせる。
定義:メモリ領域が確保される。変数定義は、変数の実体がその場所に生成される。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: とても初歩的なことなのですが・・・

#4

投稿記事 by ISLe » 13年前

変数の宣言と定義は排他的ではなく、宣言のうち、領域の確保をともなうものを定義と呼びます。

変数に限らず宣言は識別子を使えるようにするために行うものです。
変数の定義は必ず宣言を含みます。

変数宣言:変数名を使えるようにすること
変数定義:変数宣言のうち、実体の確保をともなうもの
です。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: とても初歩的なことなのですが・・・

#5

投稿記事 by Dixq (管理人) » 13年前

Aというファイルで定義した変数をBというファイルでそのまま使うことはできません。

※定義というのは
int a;
みたいな感じですね。変数を定義している部分です。

Bというファイルで使うには、Bというファイルで
extern int a;
のようにextern宣言しなければなりません。

つまりAというファイルでは
int a;
Bというファイルでは
extern int a;
とすることで、両方のファイルで変数が使えるようになるわけです。
館では、同じGV.hをincludeするだけで、これが自動的に行われるような仕組みを紹介しています。
(この使い方が良いか悪いかは置いておくとして・・・)

閉鎖

“C言語何でも質問掲示板” へ戻る