C のスコープ規則
どのような種類のプログラミングにおいても、スコープとは、プログラム内で定義された変数が存在する領域であり、この領域を超えて変数にアクセスすることはできません。 C 言語では、変数を宣言する場所が 3 つあります:
関数またはブロック内 ローカル 変数
グローバル 変数
すべての関数の外側 フォーム内の関数パラメータ定義 - パラメータ
変数、形式パラメータとは何かを見てみましょう。 ローカル変数
関数やブロック内で宣言された変数をローカル変数と呼びます。これらは、関数またはコード ブロック内のステートメントでのみ使用できます。ローカル変数は関数の外部では認識されません。以下はローカル変数の使用例です。ここで、変数 a、b、c はすべて main() 関数のローカル変数です。#include <stdio.h> int main (){ /* 局部变量声明 */ int a, b; int c; /* 实际初始化 */ a = 10; b = 20; c = a + b; printf ("value of a = %d, b = %d and c = %d\n", a, b, c); return 0;}
グローバル変数
グローバル変数は関数の外側、通常はプログラムの先頭で定義されます。グローバル変数はプログラムのライフサイクル全体を通じて有効であり、どの関数内でもアクセスできます。
グローバル変数にはどの関数からもアクセスできます。つまり、グローバル変数は、宣言された後、プログラム全体で使用できるようになります。以下は、グローバル変数とローカル変数の使用例です:
#include <stdio.h> /* 全局变量声明 */int g; int main (){ /* 局部变量声明 */ int a, b; /* 实际初始化 */ a = 10; b = 20; g = a + b; printf ("value of a = %d, b = %d and g = %d\n", a, b, g); return 0;}
プログラムでは、ローカル変数とグローバル変数の名前は同じにすることができますが、関数内では、ローカル変数の値が、グローバル変数。以下に例を示します:
#include <stdio.h> /* 全局变量声明 */int g = 20; int main (){ /* 局部变量声明 */ int g = 10; printf ("value of g = %d\n", g); return 0;}
上記のコードをコンパイルして実行すると、次の結果が生成されます:
value of g = 10
仮パラメータ
関数のパラメータ、つまり仮パラメータは、関数内のローカル変数として扱われます。そして、グローバル変数の上書きを優先します。以下に例を示します:
#include <stdio.h> /* 全局变量声明 */int a = 20; int main (){ /* 在主函数中的局部变量声明 */ int a = 10; int b = 20; int c = 0; int sum(int, int); printf ("value of a in main() = %d\n", a); c = sum( a, b); printf ("value of c in main() = %d\n", c); return 0;}/* 添加两个整数的函数 */int sum(int a, int b){ printf ("value of a in sum() = %d\n", a); printf ("value of b in sum() = %d\n", b); return a + b;}
上記のコードをコンパイルして実行すると、次の結果が生成されます:
value of a in main() = 10value of a in sum() = 10value of b in sum() = 20value of c in main() = 30
ローカル変数とグローバル変数を初期化します
ローカル変数が定義されている場合、システムはそれらを初期化しません。自分で初期化する必要があります。グローバル変数を定義すると、システムは次のように自動的に初期化します:
データ型int | |
---|---|
char |