1. プログラムの書き直し

・前回の Euclid除去法のプログラムを関数を使って書いてみよう.
・現段階ではポインタを使わずに(scanfは例外)書いてみよう

#include <stdio.h>

int input_data()
{
   int i;

   fprintf(stderr, "Input Num = ");
   scanf("%d", &i);
   return i;
}


int  euclid(int i, int j)
{
   while (i!=j) {
       if (i<j) {
           int swp = i;
           i = j;
           j = swp;
       }
       i = i - j;
   }
   return i;
}


void  output_data(int i)
{
   fprintf(stderr, "Ans = %d\n", i);
}


main()
{
   int x, y, z;

   x = input_data();
   y = input_data();
   fprintf(stderr, "Inputed Data are %d and %d\n", x, y);

   z = euclid(x, y);
   output_data(z);
}



2.ファイルをばらす

このプログラムをバラバラのファイルしてみよう.

input.c

#include <stdio.h>

int input_data()
{
   int i;

   fprintf(stderr, "Input Num = ");
   scanf("%d", &i);

   return i;
}


euclid.c

int  euclid(int i, int j)
{
   while (i!=j) {
       if (i<j) {
           int swp = i;
           i = j;
           j = swp;
       }
       i = i - j;
   }
   return i;
}


output.c

#include <stdio.h>

void  output_data(int i)
{
   fprintf(stderr, "Ans = %d\n", i);
}


main.c

#include <stdio.h>
#include "euclid.h"

main()
{
   int x, y, z;

   x = input_data();
   y = input_data();
   fprintf(stderr, "Inputed Data are %d and %d\n", x, y);

   z = euclid(x, y);
   output_data(z);
}


euclid.h

int input_data(void);
int euclid(int i, int j);
void output_data(int i);



3.分割コンパイル


一つ一つコンパイルし,最後に結合する.
main.c をコンパイルするために,euclid.h を追加した点に注意.euclid.h で関数のタイプを main.c に教える.

コンパイル方法

$ gcc main.c -c
$ gcc input.c -c
$ gcc euclid.c -c
$ gcc output.c -c
$ gcc main.o input.o euclid.o output.o -o euclid
Last modified: Friday, 8 July 2016, 10:20 AM