工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語のスコープルール:ローカル、グローバル、仮パラメータの理解

スコープとは

プログラミングにおけるスコープとは、定義された変数が存在しうるプログラムの領域のことで、その領域を超えると変数にアクセスできません。Cプログラミング言語では変数を宣言できる場所は3箇所あります:

ローカル変数とグローバル変数、仮パラメータが何であるか理解しましょう。

ローカル変数

関数またはブロック内で宣言された変数をローカル変数と呼びます。それらはその関数またはコードブロック内の文でのみ使用できます。ローカル変数は自分自身の関数の外部では知られていません。以下の例はローカル変数の使用方法を示します。ここではa、b、cすべてがmain()関数のローカル変数です。

Live Demo
#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;
}

グローバル変数

グローバル変数は関数の外部、通常プログラムの冒頭で定義されます。グローバル変数はプログラムのライフタイム全体で値を保持し、プログラムで定義されたどの関数からでもアクセスできます。

グローバル変数はどの関数からでもアクセス可能です。つまり、宣言後はプログラム全体で使用できます。以下のプログラムはグローバル変数の使用方法を示します。

Live Demo
#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;
}

プログラムはローカル変数とグローバル変数で同じ名前を持つことができますが、関数内でのローカル変数の値が優先されます。例:

Live Demo
#include <stdio.h>
/* グローバル変数宣言 */
int g = 20;
int main() {
    /* ローカル変数宣言 */
    int g = 10;
    printf("value of g = %d\n", g);
    return 0;
}

実行結果:

value of g = 10

仮パラメータ

仮パラメータは関数内ではローカル変数として扱われ、グローバル変数より優先されます。例:

Live Demo
#include <stdio.h>
/* グローバル変数宣言 */
int a = 20;
int main() {
    /* main関数内のローカル変数宣言 */
    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;
}

/* 2つの整数を加算する関数 */
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

ローカル変数とグローバル変数の初期化

ローカル変数が定義されると、システムによって初期化されません。自分で初期化する必要があります。グローバル変数は定義時にシステムによって自動的に初期化されます:

データ型初期デフォルト値
int0
char'\0'
float0
double0
pointerNULL

変数を適切に初期化することは良いプログラミング習慣です。そうでないと、未初期化変数はメモリ位置にすでにあるガベージ値を取るため、プログラムが予期せぬ結果を生む可能性があります。

C言語

  1. 直列回路の主要ルール:電流、抵抗、電圧
  2. 並列回路の基礎:電圧、抵抗、電流のルール
  3. 必須微分ルール:クイックリファレンス
  4. 基本的な原始関数ルール:定数、和、差
  5. C# 変数とプリミティブデータ型:完全マスターガイド
  6. C# 変数のスコープを理解する:クラス、メソッド、ブロックレベル
  7. C++変数・リテラル・定数完全ガイド:基礎から実践まで
  8. C言語変数・定数・リテラル完全ガイド
  9. C言語ストレージクラス完全理解:スコープ・ライフタイム・パフォーマンス
  10. 任意のスコープでのVerilog timescale理解と表示
  11. Java変数とリテラル:包括的ガイド