C++で整備された方法らしい。
Makefileも参照
ヘッダに書くもの hoge.h
原理的には,ヘッダに何を書いても構わない。
が,二重定義などがエラーのもとになる。
1. #ifndef ~ #endif で全体を挟む。
2. マクロ定義,関数のプロトタイプ宣言,クラスの宣言
3. #include もこっちに書いた方が楽チンですね。
(書いてないと,original.hpp をインクルードする度に,これが使うヘッダまで毎回インクルードすることになる。)
#ifndef HOGE_H
#define HOGE_H
//このファイルで使うフラグのマクロ定義
#define FLAG_OF_FUNC_A 1
//構造体の定義
typedef struct str{
int val_int;
char line[20];
}TYPE;
//関数のプロトタイプ宣言。セミコロンを忘れずに!
void func_a(int, double, struct str*);
//クラスの宣言もここに書く。メソッドも宣言のみ。定義は書かない。
#endif
具体的な定義 hoge.c
1. 使うヘッダは全てインクルードする。
2. using namespace もこっちに書くのがお行儀が良い。
2. main と 宣言 以外の全てをここに書く。
// 使うヘッダは全てインクルードする。
#include <stdio.h>
#include "hoge.h" //カレントに置いてるときは "" を使う。
void func_a(int, double, struct str*){
/* 具体的な定義 */
return;
// クラスメソッドの定義なんかもこっちに書く。
}
メインソース main.c
1. 使うヘッダは全てインクルードする。
2. main は小さくする。
// 使うヘッダは全てインクルードする。
#include <stdio.h>
#include "hoge.h"
void main(void)
{
/* hogehoge */
}
コンパイル
1. コンパイル → オブジェクトの生成
-cでコンパイルだけ。リンクしない。オブジェクトファイル.oを生成する。
最適化とかはこっちで付ける。
> gcc -c main.c
> gcc -c hoge.c
2. リンク → 実行ファイルの生成
*.oを全て渡す。-oで実行ファイル名を指定できる。
> gcc main.o hoge.o -o program.out
もしhoge.cだけ変更したときは
hoge.c だけコンパイルして,リンクしなおせばよい。
-lm とか -lgsl はリンク時に付ける。
リンク時
> gcc -c hoge.c
> gcc -o program.o hoge.o main.o -lm -lgsl -lgslcblas
最終更新:2010年01月07日 12:08