スポンサーリンク
static変数のスコープは、宣言したファイル内となる
static変数のスコープはファイル内となりますが、
サンプルコードで確認してみます。
まず、main.cにg_numをstatic変数として宣言します。
初期化も同時に行います。
$ cat main.c #include <stdio.h> #include "func1.h" static int g_num = 9; int main(){ printf("main : g_num=%d\n", g_num); func1(); printf("main : g_num=%d\n", g_num); return 0; }
func1.cにもg_numをstatic変数として宣言します。
$ cat func1.c #include <stdio.h> #include "func1.h" static int g_num = 1; void func1(){ printf("func1: g_num=%d\n", g_num); g_num = 10; return; }
ヘッダファイルになります。
$ cat func1.h #ifndef FUNC1_H #define FUNC1_H void func1(); #endif
コンパイルして実行してみます。
func1.cのfunc1()の中で、最後にg_num = 10 としましたが、
func1()を抜けたあと、main.cのmain()では、g_numは9となってprintf出力されています。
static変数のスコープが、ファイル内だと確認できました。
$ gcc -o sample main.c func1.c $ ./sample main : g_num=9 func1: g_num=1 main : g_num=9
スポンサーリンク
extern宣言したグローバル変数も確認
extern宣言したグローバル変数も確認してみます。
参考:[c言語]extern宣言してグローバル変数を使ったサンプルコード
$ cat main.c #include <stdio.h> #include "func1.h" int g_num = 9; int main(){ printf("main : g_num=%d\n", g_num); func1(); printf("main : g_num=%d\n", g_num); return 0; }
g_numをextern宣言します。
$ cat func1.c #include <stdio.h> #include "func1.h" extern int g_num; void func1(){ printf("func1: g_num=%d\n", g_num); g_num = 10; return; }
ヘッダファイルです。
$ cat func1.h #ifndef FUNC1_H #define FUNC1_H void func1(); #endif
コンパイルして実行してみます。
func1.cのfunc1()の中で、最後にg_num = 10 としましたが、
func1()を抜けたあと、main.cのmain()で、g_numが10となってprintf出力されています。
2つのファイル間で、g_numが参照されているのが確認できました。
$ gcc -o sample main.c func1.c $ ./sample main : g_num=9 func1: g_num=9 main : g_num=10
スポンサーリンク