C语言では異なるファイルの接続方法が何通りかあります。
C言語では、ヘッダファイルと関数宣言を用いることで、別々のファイルとの連携を実現できます。
- ヘッダファイル:ヘッダファイル(.hファイル)には、たいてい関数の宣言、マクロ定義、構造体の定義、グローバル変数の宣言が格納されています。これらの関数や変数を使用する必要があるファイルでは、#includeディレクティブを介してヘッダファイルをインポートし、ヘッダファイルで定義されている関数や変数を使用できます。
例えば、main.c と func.c の 2 つのファイルがあるとします。func.c では func() 関数が定義されており、main.c でこの関数を呼び出します。
最初に、func.cにて関数を定義します。
// func.c
#include "func.h"
void func() {
// 函数体
}
対応するヘッダファイルfunc.hを作成し、そこで関数宣言を行います。
// func.h
#ifndef FUNC_H
#define FUNC_H
void func();
#endif
最後に、main.c でヘッダーファイルをインクルードし、関数を呼び出します。
// main.c
#include "func.h"
int main() {
func(); // 调用函数
return 0;
}
このように、ヘッダーファイルのインクルードにより、main.cはfunc.cで定義した関数を呼び出すことができるようになる。
- ヘッダーファイルを使用しないファイルの接続には、関数宣言も使用できます。
main.cでは、func()関数を実際に使う前に、関数プロトタイプを宣言できます。そうすることで、コンパイラはfunc()関数の存在を知り、適切にコンパイルしてリンクできます。
// main.c
void func(); // 函数声明
int main() {
func(); // 调用函数
return 0;
}
func.cで以下のように関数定義を行います
// func.c
void func() {
// 函数体
}
関数宣言を使うと、main.c のコンパイル時に関数の実在をチェックし、定義が見つからなければリンカエラーを起こします。
ヘッダーファイルを使用する、関数宣言を使用する方法、どちらもファイル連結の実現が可能です。ヘッダーファイルを使用する方法のほうがより一般的に便利で、コードの見通しとメンテナンス性を上げることができます。一方、関数宣言を使用する方法では、比較的簡略で、小規模のプロジェクト向きです。