C のスコープ規則


どのような種類のプログラミングにおいても、スコープとは、プログラム内で定義された変数が存在する領域であり、この領域を超えて変数にアクセスすることはできません。 C 言語では、変数を宣言する場所が 3 つあります:

  1. 関数またはブロック内 ローカル 変数

  2. グローバル 変数

    すべての関数の外側
  3. フォーム内の関数パラメータ定義
  4. パラメータ

    ローカル
  5. 変数、
グローバル

変数、形式パラメータとは何かを見てみましょう。 ローカル変数

関数やブロック内で宣言された変数をローカル変数と呼びます。これらは、関数またはコード ブロック内のステートメントでのみ使用できます。ローカル変数は関数の外部では認識されません。以下はローカル変数の使用例です。ここで、変数 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

ローカル変数とグローバル変数を初期化します

ローカル変数が定義されている場合、システムはそれらを初期化しません。自分で初期化する必要があります。グローバル変数を定義すると、システムは次のように自動的に初期化します:

データ型初期化デフォルト値0'
int
char