分割コンパイル
Completion requirements
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