C言語-インタプリタminiBASIC
前へ 目次へ 次へ 

 6. ファイルの分割とMAKEコマンド

ファイルの分割

 このまま残りの命令や制御文の処理を追加していくと、プログラムファイルが大きくなり、コンパイルなどの処理が遅くなる。ここではコマンド処理の関数(mb_input, mb_print)を別のファイルmb_cmds.cに分割する。mbas05.cはmbas06.cにコピーした。

  1. 現在のプログラムファイル(mbas06.c)をコマンド処理用関数群のファイルmb_cmds.cにコピーする。
  2. ファイルmbas06.cから関数mb_inputとmb_printの部分を削除する。
  3. 関数プロトタイプ宣言には、その関数が別のファイルにあることを示すextern(外部参照)を付ける。
    6: /* 関数プロトタイプ宣言 */
    7:           void mb_input(void);
    8:           void mb_print(void);
  4. ファイルmb_cmds.cから関数mainと関数プロトタイプ宣言の部分を削除する。
  5. グローバル変数(配列)はファイルmbas05.cで宣言されているので外部参照を表すexternを付ける。
    6: /* グローバル変数 */
    7:           double  hensuu[26];        /* 変数用(A - Z) */
[mbas06.c]
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:

71:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "gettoken.h"
/* 関数プロトタイプ宣言 */
@         void mb_print(void);
@         void mb_input(void);
/* グローバル変数 */
double  hensuu[26];         /* 変数用(A〜Z) */

void main(int argc, char *argv[])
{
<<省 略>>
}
[mb_cmds.c]
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:

16:
17:
18:

28:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "gettoken.h"
/* グローバル変数 */
@         double  hensuu[26];      /* 変数用(A〜Z) */

void mb_print(void)
{
<<省 略>>
}
void mb_input(void)
{
<<省 略>>
}
[解答欄] (すべて半角文字で、空白文字もチェックされます。)
@
     

 

MAKEコマンド

 コンパイルに必要なファイルは、mbas06.c, mb_cmds.c と gettoken.c の3つである。

cc mbas06.c mb_cmds.c gettoken.o

 分割したファイルが増えてくるとコンパイルするコマンドも長くなるので、makeコマンドを使用する。
 次のようにコンパイルに必要なファイルを設定ファイルmakefileに記述する。

MAIN = mbas06
CMDS = mb_cmds
OBJ = $(MAIN).obj  $(CMDS).obj gettoken.obj

all:    mbas.exe
mbas.exe: $(OBJ)
 [Tab]  lcc -o mbas  $(OBJ)

$(MAIN).obj:    $(MAIN).c
$(CMDS).obj:    $(CMDS).c
gettoken.obj:   gettoken.c gettoken.h

[コンパイル]

make

 必要なファイルが自動的にコンパイルされる。


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system