C言語

【C言語】グローバル変数とローカル変数

この記事では、C言語のグローバル変数とローカル変数について解説します。

C言語の変数には(他のプログラミング言語にも結構)、グローバル変数とローカル変数と呼ばれるものが存在しています。この2つの変数では呼び出せる範囲が異なります。

この2つの変数の違いと使い方を見ていきましょう!

グローバル変数

グローバル変数とは、関数外で宣言した変数のことを言います。

グローバル変数の特徴
  • プログラム終了まで残り続ける
  • ファイル内のどこからでも呼び出せる
  • 静的領域にメモリを確保する(あまり気にしなくていい)

では、適当なグローバル変数を生成して使ってみます。

#include <stdio.h>

// グローバル変数
int g = 1;

// 他の関数
void func() {
    // 呼び出し可能
    printf("%d\n", g);
}

int main(){

    // 呼び出し可能
    printf("%d\n", g);

    func();
}

実行結果

1
1

いろんな場所から変数を呼び出すことができました。

グローバル変数は「残り続ける = メモリを消費し続ける」ということなので注意が必要です。使用は最小限に抑えましょう。

ローカル変数

ローカル変数とは、関数内で宣言した変数のことを言います。

ローカル変数の特徴
  • 変数を宣言した関数終了時に消滅する
  • 変数を宣言した関数内でのみ呼び出せる
  • スタック領域にメモリを確保する(あまり気にしなくていい)

以下のコードでは、ローカル変数を生成し、宣言した関数内からと他の関数から呼び出していますが、ソースコードをコンパイルするとエラーが発生して main.c:14:20: error: use of undeclared identifier 'l' と言われます。

#include <stdio.h>

int main(){

    // ローカル変数
    int l = 1;

    // 呼び出し可能
    printf("%d\n", l);

}

// 他の関数
void func() {
    // 呼び出し不能
    printf("%d\n", l);
}

func()関数内 で l が見つけられないためにエラーが発生しました。

同名の変数

同じ名前のグローバル変数とローカル変数が存在している場合に、一体どちらの変数が呼び出されるのでしょうか?

#include <stdio.h>

// グローバル変数
int num = 0;

int main(){

    // ローカル変数
    int num = 1;

    printf("%d\n", num);
}

実行結果

1

呼び出されたのはローカル変数でした。

同名の変数が存在する場合、呼び出し箇所と近い方の変数が優先されます(そもそも同じ名前の変数は危ないので注意)。

まとめ

この記事では、C言語のグローバル変数とローカル変数について解説しました。

ちゃんと理解していないと思わぬバグを引き起こす可能性があります。使いながらだんだん慣れていきましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

C言語おすすめ参考書
MMGames (著), 秀和システム(出版)
中山 清喬 (著), 株式会社フレアリンク (著)