• 演習問題2
    本章の項目4で示したファイル分割のプログラムを作成し,ルールmakeでコンパイルしなさい.

  • プログラム・リスト他
    • ヘッダファイル「hfile.h」

    • #define LMT  100
      int sum(int *, int) ;

    • プログラムファイル「sfile1.c」

    • i#include <stdio.h>
      #include "hfile.h"

      int main(void)
      {

          int n,s ;
          int d[LMT] ;

          printf("データを入力して下さい(データの終りは0)。\n") ;
          n=0 ;
          while(1)
            {
            printf("> ") ;
            scanf("%d",&d[n]) ;
            if(d[n]==0) break ;
            n++ ;
            if(n==LMT) {
                printf("入力データの個数が上限に達しました。\n") ;
                break ;
            }
            }

          s=sum(d,n) ;
          printf("%d個のデータの合計は %d です。\n",n,s) ;
          return(0) ;
      }

    • プログラムファイル「sfile2.c」

    • int sum(int d[], int n)
      {
          int s;
          int i ;

          s=0 ;
         
          for(i=0;i<n;i++) s += d[i] ;

          return(s) ;
      }


    • ファイル「Makefile」

    • a.out : sfile1.o sfile2.o
          gcc  sfile1.o sfile2.o
      sfile1.o : sfile1.c
          gcc -c sfile1.c
      sfile2.o : sfile2.c
          gcc -c sfile2.c
      sfile1.o sfile2.o : hfile.h

      clean :
          rm -f *.o a.out


  • 実行例
  • % make
    gcc -c sfile1.c
    gcc -c sfile2.c
    gcc  sfile1.o sfile2.o

    % make
    make: `a.out' is up to date.

    % ./a.out
    データを入力して下さい(データの終りは0)。
    > 1
    > 2
    > 3
    > 4
    > 5
    > 6
    > 7
    > 8
    > 9
    > 0
    9個のデータの合計は 45 です。

    % make clean
    rm -f *.o a.out

    1. 最初のmakeコマンド実行で,ファイル「Makefile」の記述に従ってソースをコンパイルし,実行可能ファイル「a.out」を作成している.
    2. 次にmakeコマンドを実行すると,オブジェクトファイル,実行可能ファイルとソースファイル,ヘッダファイルの最終更新日時に矛盾はないので,何もする必要がない旨のメッセージが出力される.
    3. 最後のmakeコマンド実行例では,コマンド行引数に「clean」を指定しているので,ファイル「Makefile」の記述に従い,オブジェクトファイルおよび実行可能ファイルを削除する.