PROG 7.4 分割コンパイル (separate compile) 
複数のファイルから、1つの実行ファイルを作る

2021年度 : 毎年、各自のプログラミング環境によって作業が異なります。今年は、特に、違いそう。そこで、一番基本的な方法でやります。


<背景> 「大きなプログラムを分けて作りたい」「プログラムを共有したい(再利用したい)」「一部の関数のみを修正しているので、そこだけをコンパイルしなおしたい」

        #define _CRT_SECURE_NO_WARNINGS

    を追加してください


<1> 3つのファイルを用意します。 (作っている関数のグループごとに、いくつかのファイルに分けます)  swap.h swap.c main.c とします。


ファイル1:swap.h  /* ヘッダーファイルと呼びます 共通情報を書きます */
#include <stdio.h>

void swap (int *x, int *y);


ファイル2: swap.c  /* swap関数の本体 */
#include "swap.h"  /* ヘッダファイルをインクルード */

void swap(int *x, int *y) {
   int tmp;

   tmp = *x;
   *x = *y;
   *y = tmp;

}

ファイル3:main.c   /* swap関数を呼び出す関数。main関数だけ */
#include "swap.h" /* ヘッダファイルをインクルード */

int main (void) {
   int a, b;

   printf("a = ");
   scanf("%d", &a);
   printf("b = ");
   scanf("%d", &b);

   printf ("BEFORE : a = %3d, b = %3d \n", a, b);

   swap(&a, &b);

   printf (" AFTER : a = %3d, b = %3d \n", a, b);

   return (0);
}

<2> 分割コンパイルします。
Visual Code班、 UNIXの皆さん


以下、VCのターミナルで行う典型的な作業例

ls
(swap.h, swap.c, main.c が、このディレクトリにあることを確認しよう)

gcc -c swap.c
(swap.cだけ、コンパイルしよう。swap.oというファイルが生成。lsで確認してみよう)

gcc -c main.c
(もう1つ、コンパイル。main.oというファイルが生成。lsで確認)

gcc -o 1102 swap.o main.o
(2つのオブジェクトファイルをリンクして、1102という実行ファイルを作成。lsで、確認をどうぞ。1102.exeができているはず)

./1102 (パワーシェルではこの記法ではダメ。コマンドプロンプトならOK
./1102.exe
(では、実行。./をお忘れなく。スペースはどこにもいれない。./は、ここにある、と 場所を指定(相対パス指定) しています)
解答例#include <stdio.h>void swap (int *x, *y);int main (void) {   int a, b, tmp;   printf("a = ");   scanf("%d", &a);    printf("b = ");   scanf("%d", &b);   printf ("BEFORE : a = %3d, b = %3d \n", a, b);   swap(&a, &b);   printf (" AFTER : a = %3d, b = %3d \n", a, b);   return (0);}void swap(int *x, int *y) {}~


Visual Studio の皆さん。この授業では、C言語を使用してください。