C - スコープ ルール
任意のプログラミングのスコープは、定義された変数が存在することができ、その変数を超えてアクセスできないプログラムの領域です。 C プログラミング言語で変数を宣言できる場所は 3 つあります −
- <リ>
local と呼ばれる関数またはブロック内
<リ>global と呼ばれるすべての関数の外
<リ>formal と呼ばれる関数パラメータの定義 パラメータ。
ローカルとは何かを理解しましょう そしてグローバル 変数、および正式 パラメータ。
ローカル変数
関数やブロック内で宣言された変数は、ローカル変数と呼ばれます。それらは、その関数またはコード ブロック内にあるステートメントでのみ使用できます。ローカル変数は、それ自体の外部の関数には認識されません。次の例は、ローカル変数の使用方法を示しています。ここで、すべての変数 a、b、c は main() 関数に対してローカルです。
ライブデモ#include <stdio.h> int main () { /* local variable declaration */ int a, b; int c; /* actual initialization */ 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> /* global variable declaration */ int g; int main () { /* local variable declaration */ int a, b; /* actual initialization */ 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> /* global variable declaration */ int g = 20; int main () { /* local variable declaration */ int g = 10; printf ("value of g = %d\n", g); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
value of g = 10
仮パラメータ
仮パラメータは、関数内でローカル変数として扱われ、グローバル変数よりも優先されます。以下は例です-
ライブデモ#include <stdio.h> /* global variable declaration */ int a = 20; int main () { /* local variable declaration in main function */ int a = 10; int b = 20; int c = 0; printf ("value of a in main() = %d\n", a); c = sum( a, b); printf ("value of c in main() = %d\n", c); return 0; } /* function to add two integers */ 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() = 10 value of a in sum() = 10 value of b in sum() = 20 value of c in main() = 30
ローカル変数とグローバル変数の初期化
ローカル変数が定義されている場合、システムによって初期化されないため、自分で初期化する必要があります。グローバル変数は、次のように定義すると、システムによって自動的に初期化されます −
データ型 | 初期デフォルト値 |
---|---|
整数 | 0 |
文字 | '\0' |
フロート | 0 |
ダブル | 0 |
ポインタ | NULL |
変数を適切に初期化することは、適切なプログラミング方法です。そうしないと、初期化されていない変数が、そのメモリ位置で既に利用可能なガベージ値を使用するため、プログラムが予期しない結果を引き起こす可能性があります。
C言語