C コンパイラは関数を暗黙的に宣言できますが、自分で行う必要があります。警告を表示すると、次のように表示されます。
file1.c: warning: implicit declaration of function ‘func_from_f2’
file1.cがコンパイルされると、この暗黙の宣言を使用してオブジェクト ファイルが作成されます。リンクするときは、オブジェクト ファイルが正常にリンクされるように、関数が実際に存在し、宣言が正しいことを期待する必要があります。
そうでない場合、リンカーは次の行のどこかでエラーを返します。
undefined reference to `func_from_f2'
また、ヘッダー ファイルは必ずしも必要ではありません。関数の宣言/prototype をソース ファイルに含めるだけでかまいません (#include
ディレクティブが基本的にこれを行います)。すなわち。以下は、警告なしで正常に動作します。
file1.c
void func_from_f2(void);
int main(void)
{
func_from_f2();
return 0;
}
file2.c
#include <stdio.h>
void func_from_f2(void)
{
puts("hello");
}
ただし、通常はヘッダー ファイルを使用するのがベスト プラクティスです。
file1.c
#include "file2.h"
int main(void)
{
func_from_f2();
return 0;
}
file2.h
#ifndef FILE2_H
#define FILE2_H
void func_from_f2(void);
#endif
file2.c
#include <stdio.h>
#include "file2.h"
void func_from_f2(void)
{
puts("hello");
}