C言語のローカル変数とグローバル変数を完全ガイド!初心者でもわかるスコープの違い
生徒
「C言語で変数が関数の外にもあったり、中にもあったりしますけど、どう違うんですか?」
先生
「C言語には、ローカル変数とグローバル変数という二種類の変数があります。これは、とても大切な考え方です。」
生徒
「どちらも変数ですよね?何が違うんでしょう?」
先生
「それでは、ローカル変数とグローバル変数の違いについて、わかりやすく解説していきましょう!」
1. C言語のローカル変数とは?
C言語のローカル変数とは、関数の中で宣言された変数のことで、呼び出された関数が動いている間だけ使える変数です。例えば、main関数の中で宣言した変数は、main関数の中だけで使うことができて、関数が終わると自動的に消えます。
身近な例えで説明すると、ローカル変数は「教室の中だけで使えるノート」のようなものです。教室から出るときにはそのノートは使えなくなる、そんなイメージです。
#include <stdio.h>
void test()
{
int x = 10; // ローカル変数
printf("%d\n", x);
}
int main()
{
test();
// printf("%d\n", x); // これはエラー
return 0;
}
このように、ローカル変数は関数の外からは見えません。プログラムの書き方を間違えると「未定義の変数です」というエラーが出ます。
2. C言語のグローバル変数とは?
グローバル変数とは、関数の外で宣言された変数のことです。プログラム全体からアクセスできるため、複数の関数で同じデータを使いたいときに便利です。
日常の例えにすると、「学校全体で共有している掲示板のようなもの」です。どの教室にいても見ることができるので、とても便利ですが、誰でも書き換えられるという注意点があります。
#include <stdio.h>
int data = 0; // グローバル変数
void add()
{
data = data + 1;
}
int main()
{
add();
add();
printf("%d\n", data); // 2
return 0;
}
グローバル変数は、宣言しただけで自動的に初期化されます。例えば、整数型なら0、浮動小数点型なら0.0に初期化されます。
3. ローカル変数とグローバル変数の違いを比較しよう
ローカル変数とグローバル変数は、見た目はどちらも変数ですが、性質がまったく違います。下記のように覚えておくと理解しやすいです。
● ローカル変数 → 関数の中だけで使える、関数が終わると消える
● グローバル変数 → プログラム全体で使える、常にメモリ上に存在する
初心者がつまずきやすいポイントとして、「同じ名前のローカル変数とグローバル変数があると、どちらが使われるのか?」という問題があります。
#include <stdio.h>
int value = 50;
int main()
{
int value = 10;
printf("%d\n", value);
return 0;
}
この場合、出力されるのは10です。なぜなら、関数の中で宣言されたローカル変数が優先されるからです。「近くにあるものを優先して使う」というルールだと覚えましょう。
4. グローバル変数を使うときの注意点
グローバル変数は便利ですが、プログラムが大きくなるほど管理が大変になるという欠点があります。どこからでも書き替えられてしまうため、予期しない動作が起きることがあります。特に初心者は、意図せず値を変更してバグが起きることが多いです。
安全にプログラミングしたいときは、可能な限りローカル変数を使い、必要なときだけグローバル変数を使うようにしましょう。
#include <stdio.h>
int count = 0;
void up()
{
count++;
}
void down()
{
count--;
}
int main()
{
up();
down();
printf("%d\n", count);
return 0;
}
このように、複数の関数が同じ変数に触ると、値がどう変わったのか追いづらくなります。ローカル変数のように限られた範囲で使うほうがプログラムの見通しが良くなります。
5. ローカル変数とグローバル変数の使い分け
プログラミング初心者は、まずローカル変数を中心に使うのがおすすめです。なぜなら、扱う範囲が小さいので間違いが少なく、バグを防ぎやすいからです。プログラムの規模が大きくなってくると、グローバル変数の扱いが難しくなりやすいです。
例えば「ゲームの得点」のように、多くの場所から値が変えられるものはグローバル変数が使われることがありますが、基本は使いすぎない方が安全です。