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 すると便利.
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( ){
/* サブルーチンのプログラム */
}