はじめまして、やまだといいます。
私は入門サイトでC言語をある程度理解し、
ゲームプログラミングの館の入門編も理解したのですが、
龍神録の館を見てみると、5章から全く理解できません。
特に、
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int img;
でなぜあそこに書いてある意味になるのかちっとも・・・
だれか心のお優しい方、わかりやすく説明していただけたら幸いです。
どうぞよろしくお願いします。
龍神録5章で何を言ってるのか全く分からない
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 龍神録5章で何を言ってるのか全く分からない
まず、#ifdefの意味をご存知ででしょうか?
それと#defineの機能です。
もし、これをご存知だったら、
と
の2つで、それぞれ
GLOBAL int img;
のマクロ展開がどうなるか書いてみてください。
それと#defineの機能です。
もし、これをご存知だったら、
// コードA
#define GLOBAL_INSTANCE
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int img;
// コードB
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int img;
GLOBAL int img;
のマクロ展開がどうなるか書いてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 龍神録5章で何を言ってるのか全く分からない
わからないなりに考えてみましたが・・・・
//コードA
#define GLOBAL_INSTANCE //GLOBAL_INSTANCEを定義
#ifdef GLOBAL_INSTANCE //GLOBAL_INSTANCEが定義されていたら
#define GLOBAL //GLOBALを空白に
#else //そうでなければ
#define GLOBAL extern //GLOBALにexternを定義
#endif //#ifdef終了
GLOBAL int img; // GLOBAL_INSTANCEが定義されているのでGLOBALを空白にする
//コードB
#ifdef GLOBAL_INSTANCE //GLOBAL_INSTANCEが定義されていたら
#define GLOBAL //GLOBALを空白に
#else //そうでなければ
#define GLOBAL extern //GLOBALをexternに
#endif //#ifdef終了
GLOBAL int img; //GLOBAL_INSTANCEが定義されていないのでGLOBALをexternにする
誤っていたらすみません
//コードA
#define GLOBAL_INSTANCE //GLOBAL_INSTANCEを定義
#ifdef GLOBAL_INSTANCE //GLOBAL_INSTANCEが定義されていたら
#define GLOBAL //GLOBALを空白に
#else //そうでなければ
#define GLOBAL extern //GLOBALにexternを定義
#endif //#ifdef終了
GLOBAL int img; // GLOBAL_INSTANCEが定義されているのでGLOBALを空白にする
//コードB
#ifdef GLOBAL_INSTANCE //GLOBAL_INSTANCEが定義されていたら
#define GLOBAL //GLOBALを空白に
#else //そうでなければ
#define GLOBAL extern //GLOBALをexternに
#endif //#ifdef終了
GLOBAL int img; //GLOBAL_INSTANCEが定義されていないのでGLOBALをexternにする
誤っていたらすみません
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 龍神録5章で何を言ってるのか全く分からない
そうですね。考えとしては合っています。
もしかしたら、
int img; //実体を定義する
extern int img; //外部参照を行う。
の違いについての疑問でしょうか?
【追記】
あるいは、プリコンパイル、コンパイル、リンクで行われる工程がよく分からない可能性もありますね。
(1)プリコンパイル ・・・ cppとhを混ぜあわせて、#defineなどの置き換えも行う。
(2)コンパイル ・・・ (1)で作りだされたソースをコンパイルしてオブジェクトを作成する。
(3)リンク ・・・ (2)で作り出されたオブジェクトをつなぎあわせてexeを作成する。
もしかしたら、
int img; //実体を定義する
extern int img; //外部参照を行う。
の違いについての疑問でしょうか?
【追記】
あるいは、プリコンパイル、コンパイル、リンクで行われる工程がよく分からない可能性もありますね。
(1)プリコンパイル ・・・ cppとhを混ぜあわせて、#defineなどの置き換えも行う。
(2)コンパイル ・・・ (1)で作りだされたソースをコンパイルしてオブジェクトを作成する。
(3)リンク ・・・ (2)で作り出されたオブジェクトをつなぎあわせてexeを作成する。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 龍神録5章で何を言ってるのか全く分からない
丁寧なご指導ありがとうございました。
おかげさまで理解することができました。
あの考え方で合っていたのですね。
本当にありがとうございました。
おかげさまで理解することができました。
あの考え方で合っていたのですね。
本当にありがとうございました。