Project_OKI’s diary

エンジニアの勉強ブログ

C言語基礎知識10(extern宣言)

​​​

extern宣言とは

・目次

 

1.externとは

(1) 他ファイルからのアクセスを可能とするための宣言。
 
(2) 作成した.cファイル以外(外部のファイル)で変数や、関数を使用する場合に使用する。
 
(3) 例: sub.cで作成されているgNumberというグローバル変数をmain.cで使用したい場合
 
(4) 実際なくても動作する。

※「extern」を付けた変数定義は「定義」ではなく「宣言」という扱い 
 (1) 変数がメモリに実体化されない。

 (2) extern宣言に初期化をすると、エラーになる。
 
 (3) 例:extern int gNumber=0; //これだとエラーになる。

参考:
・​C言語のexternキーワードについて(関数編)
・​C言語 extern宣言とグローバル変数【宣言不要な設計手法】

2.externの使い方

(1) 使用方法、書き方
 //変数でextern宣言する場合
 extern 型名 変数;

 //関数でextern宣言する場合
 extern void func(); //引数なしの場合

(2) 使用例(enumを使ったプログラムの作成)
例:
ファイルを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宣言は省略可能なため、使われない場合が多い。

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - 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

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary