C グローバル変数を複数のファイル (コンパイル ユニット) 間で共有する方法を理解しようとしています。ここで素晴らしい質問と回答を読みました。ただし、いくつかのテストを行った後、まだ得られないものがいくつか残っています。
基本的に私の質問は次のとおりです: キーワードなしでヘッダーに宣言されている (ただし定義されていない) 変数がある場合、extern
その変数をすべてのコンパイル ユニットで使用できるようにするために、さまざまなコンパイル ユニットにそのヘッダーを含めるだけで問題ありませんか? このシナリオでは、1 つ (そして 1 つだけ) のコンパイル ユニットにその変数を初期化 (定義?) するためのコードが含まれていることを意味し、他のコンパイル ユニットがその変数を使用して何かを実行しようとする前に最初に呼び出されます。これがすべて当てはまる場合、この手順は「暗黙の外部」と呼ばれるものですか?
私の質問を例で説明します:
ヘッダー「MyCommonHeader.h」には次が含まれます。
//MyCommonHeader.h
int* i; //pointer to an int
ファイル MyFirstHeader.h には以下が含まれます。
//MyFirstHeader.h
void changeIt(int newValue);
ファイル MyFirstSource.c には以下が含まれます。
//MyFirstSource.c
#include "MyFirstHeader.h"
void changeIt(int newValue) {
*i = newValue;
}
ファイル MySecondSource.c には以下が含まれます。
//MySecondSource.c
#include "MyCommonHeader.h"
#include "MyFirstHeader.h"
void main() {
i = malloc(sizeof(int));
changeIt(10);
*i = 23;
}
上記のコードはどこでも同じ i 変数で動作しますか? extern
どこかに追加する必要がありますか?