C++講座 第5回

2008-06-03にやった内容です. 今回は,C++からは少し離れて「分割コンパイル」の話です. C言語でもC++でも基本的には同じです.

長いプログラムは関数に分けて書いていると思いますが, それでもプログラムが大きくなると1つのファイルでは管理が大変になります. また,コンパイルにかかる時間も長くなります.

そんなわけで,ソースファイルを分けましょう. ソースファイルを分けると,見通しがよくなります. あと,変更したファイルだけ再コンパイルすればよくなります(今回は省略).

分割コンパイル

まず,main.cppとcalc.cppを作ってください.

main.cpp

#include <stdio.h>
int add(int a,int b);
int sub(int a,int b);

int main(){
  printf("%d\n",add(15,11));
  printf("%d\n",sub(10,8));
  return 0;
}

calc.cpp

int add(int a,int b){
  return a+b;
}
int sub(int a,int b){
  return a-b;
}

コンパイル

VC++の人はプロジェクトにファイルを追加してやれば勝手にやってくれます.

gccの人は,

g++ main.cpp calc.cpp

という風に,複数のソースをまとめて指定するだけです.

解説(?)

main.cppにある

int add(int a,int b);
int sub(int a,int b);

この2行が重要です.

addとsubの2つの関数はmain.cppには存在しません. 未定義の関数を使うとコンパイルエラーになりますが, 関数の型をとりあえず宣言しておくことで, コンパイラ(実際にやるのはリンカ)が,calc.cppにある関数を 見つけてくれます.

これは関数の「プロトタイプ宣言」と言います.

ヘッダファイル

今回は関数が2つなので,プロトタイプ宣言も短いですが, 関数が増えると邪魔になってきます.

そんなときは,calc.hというヘッダファイルを作って,

int add(int a,int b);
int sub(int a,int b);

と書いておけば,main.cppでは

#include "calc.h"

とするだけで済みます.

いつも何も考えずにincludeしている「stdio.h」には, printfやscanf等のプロトタイプ宣言が書かれています.

Texts

total: 1771  / today: 1  / yesterday: 1  / now: 1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-09-22 (火) 17:41:45 (1372d)