複数のCファイルをプログラム内でコンパイルする
以下の2つのファイルがあります。
file1.c
int main(){
foo();
return 0;
}
file2.c
void foo(){
}
2つのファイルを一緒にコンパイルしてリンクすれば、extern
を追加しなくても file1.c
が foo
関数を認識するようになりますか?
プロトタイプを更新しました。
gcc file1.c file2.c throws: warning: implicit declaration of function foo.
14
3
正しい方法は以下の通りです。
file1.c
file2.h
file2.c
output
extern
は必要ありませんが、file1.c には
foo()` が存在することが宣言されていなければなりません。通常、この宣言はヘッダーファイルの中にあります。ヘッダーファイルを使わずに前方宣言を追加するには、file1.c を次のように修正するだけです。
できるけど、やってはいけない。
ヘッダーファイルfile2.hを使用します。
そして、追加します。
in file1.c
コンパイルするには
一般的なルールとして、依存するモジュール内でアドホックなプロトタイプを使用するよりも、各モジュールのインターフェイスを定義するヘッダーファイルを使用する方が良い(より堅牢である)です。これは、SPOT (Single Point Of Truth) の原則と呼ばれることもあります。