分割コンパイル

定義と処理を分割する
コードを読む場合は、処理部分のコードを読むのが普通です。しかし、知らない関数があるとその関数が定義してある部分も必要とすることがありますが、多くは、その関数の戻り値の型、引数の数と型をチェックする程度でしょう。
以下は、関数の定義をまるごとヘッダファイルに書いた例です。
mylib.h-----------------------------------
int add(int x,int y)
{
    return (x+y);
}
mylib.h の拡張子は.c や.cc でも何でもかまいませんがinclude されるファイルということがわかるように.h にしています。
main.c----------------------------------------
#include <stdio.h>
#include "mylib.h"
int main(void)
{
   fprintf(stdout,"add=%d",add(1,2));
   return 0;
}

コンパイル

この例は、関数の定義とmain のソースコードを別にした例です。この例の場合は、コードが短いので分割する必要はありません。しかし、コードが長くなると複数のファイルに分割するでしょう。複数のファイルに分割する利点は、可読性やソースコードがファイル単位なので再利用がしやすくなることです。ファイルの分割は、関数ごと、機能ごとなどにファイルを分割しておきます。
C:\usr\opencv>cl main.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

main.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:main.exe
main.obj

C:\usr\opencv>main
add=3

C:\usr\opencv>

2つのソースコードをコンパイル

mylib.hファイルをインクルードしましが、main.cの#include "mylib.h"の行を削除してもコンパイルする方法があります。
main.c----------------------------------------
#include <stdio.h>

int main(void)
{
   fprintf(stdout,"add=%d",add(1,2));
   return 0;
}
mylib.hファイル名ではコンパイルできないし、本来cのソースコードなのでmylib.cにします。
C:\usr\opencv>move mylib.h mylib.c
2つのソースコードを並べてコンパイルします。
C:\usr\opencv>cl main.c mylib.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

main.c
mylib.c
コードを生成中...
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:main.exe
main.obj
mylib.obj

C:\usr\opencv>main
add=3

定義用のヘッダファイルを用意する

本題です。これが言いたかった。
mylib.h----------------------
int add(int,int);

mylib.c----------------------
int add(int x,int y)
{
    return (x+y);
}

main.c----------------------------------------
#include <stdio.h>
#include "mylib.h"
int main(void)
{
   fprintf(stdout,"add=%d",add(1,2));
   return 0;
}
コンパイルは、2つのソースコードを並べてコンパイルします。
C:\usr\opencv>cl main.c mylib.c
main.cにincludeされているヘッダファイルを見ればどんな関数を使っているかわかる点と、そのインクルードファイルをたどればmain.cに定義されてない関数のプロトタイプ宣言が見れるかわかる点が優れています。
プロトタイプ宣言を見ればだいたいその関数の使い方もわかる。(コメントが書かれていることもある。)
また、今回はmylib.cのソースコードが見えますが、購入したものならソースコードは見えません。そんな時はヘッダファイルを見ると使いかが書いてあったりします。
名前:
コメント:
「今日の訪問数: -
「昨日の訪問数: -
「今までの訪問数: -
最終更新:2010年02月10日 14:01
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。