ページ 11

龍神録プログラミングの館第5章について

Posted: 2010年3月04日(木) 01:19
by ys
はじめまして。昨日よりここのお世話になっております。
タイトルにもあります第5章についてわからない点があります。

#ifdefを使うことによってGLOBAL_INSTANCEが定義されている場合(main.cpp)はGLOBALを空白に、
定義されていない場合(他.cpp)はGLOBALをexternにしてグローバル変数をうまく取り扱うというのは理解できたのですが、
同時に関数の宣言の場合は逆にmain.cppではexternをつけて宣言しないといけないし、
他.cppでは宣言いらないしで、上の#ifdefの文にあわない気がして納得が出来ません。

どういう仕組みになっているのか、もしよろしければご教授お願いいたします。

Re:龍神録プログラミングの館第5章について

Posted: 2010年3月04日(木) 03:00
by Justy
 関数のプロトタイプ宣言で externや staticなどの記憶域クラス指定子がついていない場合、
その宣言には externをついているものとして扱われます。

 つまり、
extern void boss_shot_main();
void boss_shot_main();
のどちらで書いても同じ扱いとなります。

 試しに function.hの各プロトタイプ宣言から GLOBALを取り除いてみて下さい。
 問題なくコンパイルはできるはずです。