C言語 | 関数 | 変数の有効範囲
変数のスコープと生存期間は、宣言する場所によって決まります。
自動変数
ブロック内で宣言した変数を自動変数、またはローカル変数と呼びます。処理がブロックに入ると作成され、ブロックを抜けると破棄されます。そのブロック内でのみ参照できます。
void Function(void) {
int iValue;
}
int main(void) {
int iValue;
}
この2つは同じ名前ですが、スコープが異なるため衝突しません。スコープは関数だけでなくブロック単位で考えます。
#include <stdio.h>
int main(void) {
{
int iCount;
for (iCount = 0; iCount < 10; iCount++)
printf("1st for : iCount = %d\n", iCount);
}
{
int iCount;
for (iCount = 0; iCount < 10; iCount++)
printf("2nd for : iCount = %d\n", iCount);
}
return 0;
}
外部変数
関数の外側で宣言した変数を外部変数、またはグローバル変数と呼びます。生存期間はプログラム終了まで続き、複数の関数で共有できます。
#include <stdio.h>
int iValue = 10;
void Function(void);
int main(void) {
Function();
iValue = 100;
Function();
return 0;
}
void Function(void) {
printf("iValue = %d\n", iValue);
}
グローバル変数はどの関数からも変更できるため、大規模なプログラムでは理解を難しくします。共有状態が必要でない限り、引数と戻り値を優先してください。
ローカル変数とグローバル変数の名前が同じ場合、より近いローカル宣言が優先されます。