(57)【特許請求の範囲】
【請求項１】
値のわかっている直値データを使用するプログラミングにおいて、
前記直値データを定義したインクルードファイルから変数の外部参照宣言をした外部参照ファイルと実データを記述したソースデータファイルを作成し、コンパイル時にソースプログラムファイルのインクルード文で前記外部参照ファイルを取り込むとともに、前記実データを記述したソースデータファイルもコンパイルをしておき、リンク時にオブジェクトプログラムファイルとリンクすることを特徴とする直値リンク法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は処理やデータを番号で管理しているプログラミングに関する。
【０００２】
【従来の技術】
従来、プログラミングにおいて同系列の処理やデータなどをそれぞれ番号で管理する手法がある。例えば、この処理は画像圧縮の１番、画像圧縮の２番、あるいはこの絵はデータの１番、データの２番というように番号が付けられる。このような番号による処理やデータの管理は、分かり易く、またメモリの節約になる場合もあるので特にゲームのプログラミングで広く行われている。
【０００３】
プログラムにおいて一般に値のわかっているデータは直接そのまま使用する。これを、ここでは直値データとよぶ。たとえば、銀行預金の１年間の利息がわかっているとき、その元利合計は（元金×（１＋利息））と計算できる。
【０００４】
いま元金ａ、利息２．５％なら、元利合計ｔは
ｔ＝ａ×（１＋０．０２５）
と求まる。プログラムを読む場合に直接値がわかってわかりやすいし、また値を使った方がプログラムも書きやすい。
【０００５】
しかしこのような書き方では、年率が変わるたびに値を変えなければならない。それも一ヶ所ならともかく、複数のステートメント（命令文）でこのような値が使われているときには、その修正だけで大変な労力を伴う。
【０００６】
そこで変更の可能性のある値は、一般に変数化しておく。この変数に値を設定する方法には一般に二つの方法がある。一つは代入文による方法、もう一つは変数の定義時に値を与える方法である。
【０００７】
たとえば前者の方法は
ｆｌｏａｔ  ｒ；
ｒ＝０．０２５；        （Ｃ言語の例）
と初期化し、各処理で
ｔ＝ａ＊（１＋ｒ）；
のように使用する。
【０００８】
このようにしておけば、年率ｒに変更があっても、最初の「ｒ＝０，０２５；」文だけを修正すれば、プログラム内のｒを使用している個所を修正する必要はない。
【０００９】
後者の例では
ｆｌｏａｔ  ｒ＝０．０２５；    （Ｃ言語の例）
のように、ｒの属性を定義する段階で直接初期値を設定する。
【００１０】
この場合も、基本的に前者の場合と同じ扱いになる。したがって、このような使い方は最初に挙げた直値データを直接使用する場合に比べて、変更に強いプログラムとなる。
【００１１】
しかし、問題がこれですべて解決したわけではない。というのは、この方法では変数と直値データの２エリアを取り、しかも実行時に値のセットとなるからだ。
【００１２】
さらにもっと大きな問題点としては、変更する変数が複数のプログラムで使われている場合には、その変数（プログラムごとに記号が異なっても可）の使われているプログラムはすべて修正し、再コンパイルをし直さなければならないことである。
【００１３】
そこで以上の問題点を解決する方法として、直値データを変数化し、しかもそれをインクルードファイルにする方法である。直値データの変数化とは、たとえばＣの場合は
＃ｄｅｆｉｎｅ  ｒ  ０．０２５；
と定義する。
【００１４】
アセンブラなら
ｒ  ｅｑｕ  ０．０２５
と定義する。
【００１５】
このようにしておけば、プログラム内でｒを使用すると、すなわち直接０．０２５を使ったと同じ意味で扱われる（変数ｒが０．０２５と同じアドレスであるから。このためメモリの節約にもなっている）。
【００１６】
しかもこの定義文をインクルードファイルにしておけば、直値データの変更はインクルードファイルだけの修正でことが足りる。このため、この直値データを使用しているプログラムを直接さわることなく、コンパイル、リンクだけで対処できる（図１）。
【００１７】
【発明が解決しようとする課題】
上記の方法でも問題点は残る。第一に、必ずコンパイルからやり直さなければならないことである。変更した直値データ変数が一つでもプログラム内にあるときは、そのプログラムのコンパイルとリンクをしておかないと、変更値が正しく反映されない。
【００１８】
変更プログラムの数が１本や２本なら問題ないが、それが何十本とまとまると、コンパイルだけで大変な労力である。もし一つでもコンパイルもれがあると、プログラムの実行結果に重大な支障を来すたすことになる。
【００１９】
ゲームのプログラミングの場合、メモリの節約のために画像データや処理ルーチンを番号で管理しているために、直値データを各プログラムで使用しているので、ときにこのようなことがプログラム管理の上で重大な問題となるのである。
【００２０】
本発明は、直値データを定義した変数が登録されているインクルードファイルの値に変更が生じた場合に、それを使用しているプログラムをコンパイルしなくても、リンクだけで対応できるようにするものである。
【００２１】
【課題を解決するための手段】
本発明では、直値データを定義したインクルードファイルから、外部参照ファイルとソースデータファイルを作成する。ここで、外部参照ファイルは変数の外部参照宣言をしたファイルであり、ソースデータファイルは実データを記述したファイルである。
【００２２】
コンパイル時にソースプログラムファイルのインクルード文で取り込まれるファイルは、元のインクルードファイルではなく、外部参照ファイルを取り込むようにする。一方、実データファイルもコンパイルをしておき、リンク時にオブジェクトプログラムファイルとリンクする。
【００２３】
このようにすれば、直値データに変更があっても、直値データを定義したファイルの再コンパイルとオブジェクトプログラムファイルのリンクだけでよく、ソースプログラムの再コンパイルをしなくても実行ファイルが作成できる。以上の手順を示したのが図２である。
【００２４】
【実施例】
言語としてアセンブラを使用した例を示す。直値データを定義したファイルを番号ヘッダーファイルとよぶ。いま、図３のような番号ヘッダーファイルがあったとする。ｅｑｕ文は等価（アドレスが同じこと）を表す。
【００２５】
たとえば「目データ  ｅｑｕ  １」は、プログラム内で１とする代わりに「目データ」と記述しても、同じ意味として解釈される。従来の書き方では、直接この番号ヘッダーファイルをプログラムでインクルードしていた（図４）。ｉｎｃｌｕｄｅ文があると、コンパイルの前処理としてプリプロセッサがｉｎｃｌｕｄｅで指定したファイル名をソースプログラム内に取り込む。ただし通常、この処理はコンパイラが行っているので、他のフローではプリプロセッサの記述は省いている。
【００２６】
このため、何らかの都合で番号に変更があった場合は、再度ソースプログラムファイルをコンパイルする必要があった。そこで本発明では前段階として、この番号ヘッダーファイルを外部参照ファイル作成処理を通して、図５のように外部参照ヘッダーファイルと番号ソースファイルを作る。
【００２７】
外部参照ヘッダーファイルには実データは入れずに、変数名をｅｘｔｅｒｎ宣言のみしておく。ｅｘｔｅｒｎは変数を外部参照であることを宣言するもので、そのデータは外部参照であることを示すものである。
【００２８】
したがって、その変数の解決はリンク時に行われる。そこで実データの入った番号ソースファイルをコンパイルし、オブジェクトファイルを作成しておく。番号ソースファイルでは、外部参照ファイルでｅｘｔｅｒｎ宣言したと同じ変数名をｐｕｂｌｉｃで宣言し、この変数がグローバル属性であることを宣言する（グローバル変数とは、各プログラムで参照できる共通エリアの一変数のこと）。
【００２９】
このようにすれば、番号ソースファイルをコンパイルした結果と、プログラム用オブジェクトファイルをリンクすることにより未解決変数名は解消され、実行時に実際の番号データが参照できる。
【００３０】
以上の手順を示したものが図６である。この方法をとれば、データ値に変更があってもプログラムの再コンパイルは必要なく、番号ソースファイルのコンパイルとリンクだけで対処できる。一度オブジェクトファイルを作っておけば、番号ヘッダーファイルの値を変更があっても、ソースプログラムファイルのコンパイルは不要である（波線内の処理）。
【００３１】
【発明の効果】
本発明により、直値データの値変更に伴って行っていた、各プログラムの再コンパイルが不要となり、リンクだけで対処できるようになる。その結果、プログラム管理がしやすくなる。とくに従来の方式ではソースプログラムのコンパイル忘れによるエラー発生が本発明処理ではなくなる。
【図面の簡単な説明】
【図１】インクルードファイルのあるコンパイル／リンク／ゴーの処理手順を示す流れ図である。
【図２】本発明における直値データの外部参照解決手順を示す流れ図である。
【図３】番号ヘッダーファイルの例の説明図である。
【図４】インクルードファイルを使用した従来のコンパイル法の流れ図である。
【図５】本発明の手順で作られる外部参照ヘッダーファイルと番号ソースファイルの例の説明図である。
【図６】本発明のコンパイル／リンク手順の例の流れ図である。
【図１】
0003544221.tif 000002
【図２】
0003544221.tif 000003
【図３】
0003544221.tif 000004
【図４】
0003544221.tif 000005
【図５】
0003544221.tif 000006
【図６】
0003544221.tif 000007