Extern 変数
extern キーワードは変数名の宣言に静的ストレージクラスとグローバルライフタイムの識別子として使用されます。これらの変数はプログラムの先頭から存在し、メモリはプログラムの開始直後に割り当てられ初期化されます。
複数のソースファイルで構成されたプログラムを作成することは可能です。この場合、プリプロセッサに指示する #include ディレクティブが使用されます。同じ型と識別子を持つ extern と宣言された変数は、プロジェクト内の複数のソースファイルに存在することが出来ます。
プロジェクト全体をコンパイルする時、同じ型と識別子を持つ全ての extern 変数は、グローバル変数プールのメモリの一部に関連しています。Extern 変数は、ソースファイルの分割コンパイルするのに便利です。Extern 変数が初期化出来るのは一度だけです。同じ型と識別子を持つ extern 変数の複数の初期化は禁止されています。
参照
データ型、型のカプセル化と拡張性、変数の初期化、変数のアクセス権スコープとライフタイム、オブジェクトの作成と解徐