extern宣言とは
・目次
1.externとは
(1) 他ファイルからのアクセスを可能とするための宣言。
(2) 作成した.cファイル以外(外部のファイル)で変数や、関数を使用する場合に使用する。
(3) 例: sub.cで作成されているgNumberというグローバル変数をmain.cで使用したい場合
(4) 実際なくても動作する。
※「extern」を付けた変数定義は「定義」ではなく「宣言」という扱い
(1) 変数がメモリに実体化されない。
(2) extern宣言に初期化をすると、エラーになる。
※「extern」を付けた変数定義は「定義」ではなく「宣言」という扱い
(1) 変数がメモリに実体化されない。
(2) extern宣言に初期化をすると、エラーになる。
(3) 例:extern int gNumber=0; //これだとエラーになる。
参考:
・C言語のexternキーワードについて(関数編)
・C言語 extern宣言とグローバル変数【宣言不要な設計手法】
2.externの使い方
(1) 使用方法、書き方
//変数でextern宣言する場合
extern 型名 変数;
//関数でextern宣言する場合
extern void func(); //引数なしの場合
extern 型名 変数;
//関数でextern宣言する場合
extern void func(); //引数なしの場合
(2) 使用例(enumを使ったプログラムの作成)
例:
ファイルをmain.cとsub.c、sub.hの3つのファイルを作成する。
ファイルをmain.cとsub.c、sub.hの3つのファイルを作成する。
プログラムの内容:
sub.cで、test=200の変数を作成。
funcという関数を作成し、関数でtestに+100する関数を作成する。
main.cのmain関数で、それを実行する。
sub.hで、宣言を行う。
//sub.hファイルの作成 //変数宣言 extern int test; //関数宣言 extern void func();
//sub.cファイル int test = 200; // グローバル変数 void func(void) { test += 100; //gNumberに100追加 }
//main.cファイル //ファイルのインクルード #include <stdio.h> #include "sub.h" //メイン処理 int main(void) { func(); ///func関数の実行 printf("gNumber : %d\n", test); //gNumberの数値を表示 (gNumber:200) return 0; }
実際には、変数をファイル間で共有することは少なく。
関数のextern宣言は省略可能なため、使われない場合が多い。
関連記事
過去の記事:
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary
・知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary
・C言語基礎知識6(関数) - Project_OKI’s diary
・C言語基礎知識7(構造体1) - Project_OKI’s diary
・C言語基礎知識8(enum:列挙型) - Project_OKI’s diary
・C言語基礎知識9(typedef) - Project_OKI’s diary