ローカル変数とグローバル変数

複合文の中で宣言された変数は、その複合文の範囲でのみ利用することができます。よって、関数の本体内で宣言された変数は、その関数でしか使うことができません。関数の処理が終了すれば、関数内で使用していた変数はその役割を終えて破棄されます。よって、次のようなコードはエラーとなります。

void func1(void)
{
    int x;
    ...
}
void func2(void)
{
    x = 10;
}

func1()関数内で宣言されている変数xは、func1()関数の中でのみ可視です。よって、func2()関数からx変数にアクセスすることはできません。逆に言えば、他の関数で宣言されている識別子は影響されません。同じ識別子の変数を重複して宣言することはできませんが、関数が異なっていれば識別子が衝突することはありません。

void func1(void)
{
    int x;
    ...
}
void func2(void)
{
    int x;
    ...
}

func1()関数とfunc2()関数で、同じ名前の変数xが宣言されています。しかし、関数内で宣言された変数は、その関数の中でしか使えないので問題はありません。func1()関数のx変数とfunc2() 関数のx変数は、全く別物です。このような変数が有効な範囲のことを、変数のスコープと呼びます。