コメントにきちんと書くと長すぎるので、代わりにこれを回答として追加します。
複数のソース ファイルを扱う場合は、それらを 1 つずつオブジェクト ファイルにコンパイルし、別の手順でそれらをリンクして最終的な実行可能プログラムを作成する必要があります。
まず、オブジェクト ファイルを作成します。
$ gcc -Wall -g file_1.c -c -o file_1.o
$ gcc -Wall -g file_2.c -c -o file_2.o
$ gcc -Wall -g file_3.c -c -o file_3.o
このフラグ-c
は、オブジェクト ファイルを生成するように GCC に指示します。このフラグ-o
は、出力ファイル (この場合はオブジェクト ファイル) の名前を GCC に指示します。追加のフラグは-Wall
、-g
GCC にさらに多くの警告を生成するように指示します (常に有効です。警告を修正すると、実行時エラーを引き起こす可能性のある問題が実際に修正される可能性があります)。デバッグ情報を生成します。
次に、ファイルをリンクします。
$ gcc file_1.o file_2.o file_3.o -o my_program
このコマンドは、リンカを呼び出し、すべての名前付きオブジェクト ファイルを実行可能プログラムにリンクするように GCC に指示しますmy_program
。
複数のソース ファイルで必要な構造体や関数がある場合は、ヘッダー ファイルを使用します。
たとえば、複数のソース ファイルから使用する必要がある構造体my_structure
と関数があるとします。次のようなヘッダー ファイルを作成できます。my_function
header_1.h
/* Include guard, to protect the file from being included multiple times
* in the same source file
*/
#ifndef HEADER_1
#define HEADER_1
/* Define a structure */
struct my_structure
{
int some_int;
char some_string[32];
};
/* Declare a function prototype */
void my_function(struct my_structure *);
#endif
このファイルは、次のようにソース ファイルに含めることができます。
#include "header_1.h"