extern
extern宣言:
他ファイルからのアクセスを可能とするための宣言。
外部のファイルに変数が定義されていますよということ。
※「extern」を付けた変数定義は「定義」ではなく「宣言」という扱い
変数がメモリに実体化されない。
extern宣言に初期化をすると、エラーになる。
例:extern int gNumber=0; //これだとエラーになる。
例:
下記 sub.cで作成されているgNumberというグローバル変数をmain.cで使用したい場合、
extern int gNumber; を入れる事により、main.cで使用可能となる。
code:c
//main.cファイル
//ファイルのインクルード
extern int gNumber; // extern宣言
//メイン処理
int main(void)
{
func(); //func関数の実行
printf("gNumber : %d\n", gNumber); //gNumberの数値を表示 (gNumber:200)
return 0;
}
code:c
//sub.cファイル
int gNumber = 100; // グローバル変数
void func(void)
{
gNumber += 100; //gNumberに100追加
}
これが、下記のように、extern宣言していないとエラーになる。
code:c
//main.cファイル
//ファイルのインクルード
//extern int gNumber; // extern宣言
//メイン処理
int main(void)
{
func(); //func関数の実行
printf("gNumber : %d\n", gNumber); //gNumberの数値を表示 (gNumber:200)
return 0;
}
code:c
//sub.cファイル
int gNumber = 100; // グローバル変数
void func(void)
{
gNumber += 100; //gNumberに100追加
}
sub.cのグローバル変数をmain.cで使用しなければ、エラーには、ならない。
code:c
//main.cファイル
//ファイルのインクルード
//extern int gNumber; // extern宣言
//メイン処理
int main(void)
{
func(); //func関数の実行
return 0;
}
code:c
//sub.cファイル
int gNumber = 100; // グローバル変数
void func(void)
{
gNumber += 100; //gNumberに100追加
printf("gNumber : %d\n", gNumber); //gNumberの数値を表示 (gNumber:200);
}
上記プログラムでは、.cファイルにextern宣言を書いてあるが、本来なら、ヘッダファイル(.hファイル)に書く。
ただ、グローバル変数は、開発上意図しない変更が起こってしまうため、グローバル変数に、extern宣言を使うことは殆どない。
また、現在のC言語では、extern宣言しなくても、問題なく使用できる。
ヘッダファイルを使用したextern宣言
code:c
//main.cファイル
int main(void)
{
func();
printf("gNumber : %d\n", gNumber);
return 0;
}
code:c
//sub.cファイル
int gNumber = 100; // グローバル変数
void func(void)
{
gNumber += 100;
}
code:c
//sub.hファイル
extern int gNumber; // extern宣言
関数:
確認:
複数