.分割コンパイル

全文

(1)

11 10.分割コンパイル

ひとつのプログラムを作成する際に,ソースコードを複数のファイルに分割して作成する 方法.

一つのプログラムが,sample.c, sub1.c, sub2.c から構成されているものとする.

[コンパイルの方法]

cc ‑c sample.c  cc ‑c sub1.c  cc ‑c sub2.c 

cc ‑o sample sample.o sub1.o sub2.o 

ソース−(コンパイル)→アセンブラコード−(アセンブル)→オブジェクトコード cc ‑c 

オブジェクトコード1

オブジェクトコード2 −(リンク)→実行ファイル オブジェクトコード3

[利点]

1.開発時のコンパイル時間の短縮

2.汎用的関数やサブルーチンの再利用が可能

3.関数(名),変数(名)の通用範囲(スコープ)の制限が可能

[どのようなときに使うか]

1.多人数でのプログラム開発(OSなど)

2.大規模なプログラム開発

(例)プログラムのあるサブルーチンをいろいろ取り替えて実行してみたい.

一つの処理をいろいろなプログラムの中で利用したい.

(オブジェクトコードを一度作っておけばリンクするだけでよい)

[ヘッダファイルと再コンパイルのお話]

分割してソースファイルを作成する場合,同じ 配列,関数,パラメータ......

がいくつかのファイルで用いられることが多い.このとき

関数や配列のプロトタイプ宣言

パラメータの宣言(定義)

などを,それぞれのソースファイルの先頭で行わなければならない.

しかし,同じ文をそれぞれのソースファイルに書くのは無駄が多い.また,その部分 を修正したい時には,全てのファイルで修正しなければならない(ミスを発生しやす い).そこで,それらをヘッダファイルに置き,必要に応じて include すると便利.

(2)

12

(例) config.h  

     

sample.c sub1.c

   

[ヘッダファイルに何を書くか]

・関数,配列のプロトタイプ宣言 ・define 文

・大域変数(使い方による)

×プログラム本体は書かない

ヘッダファイルを修正したときには,

それを include しているファイルすべてを再コンパイルする必要がある.

↓ 覚えるのは大変

make の利用

レポート課題

7.課題6作成した Newton 法のプログラムを,関数(Cの関数)毎のファイルに分け,

分割コンパイルにより作成せよ.A)分割コンパイルするときのコマンド入力と実行結 果,B)プログラムのソース,およびC)ヘッダファイルを作成した場合,そのソー スと内容の説明,を提出せよ.

8.Newton法には,

• 収束が早い

• 必ずしも収束しない(適当な初期点からはじめるといつまでも止まらない)

という特徴があります.これらの特徴が確認できるような問題例を考えなさい.また,

その例を用いた実行結果を提出せよ.

(二分法などとの比較を行ってもよい)

締 切

   :12月21日(火)午後4時(期限厳守)

提出先:システム事務室

#define MAX 0  void push(double)

#include <stdio.h> 

#include "config.h" 

 

main( ){ 

/* メインプログラム */ 

#include <stdio.h> 

#include "config.h" 

 

  sub1( ){ 

    /* サブルーチンのプログラム */ 

  } 

Updating...

参照

Updating...

関連した話題 :