Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のスコープルールとは?グローバル変数とローカル変数の基礎を解説

C言語における「スコープ」とは、プログラムの中で識別子や変数に直接アクセスできる範囲(有効範囲)のことを指します。スコープを正しく理解することは、バグの少ない読みやすいコードを書くための第一歩です。

C言語のスコープルールは、大きく分けて以下の2つのカテゴリに分類されます。

グローバル変数

グローバル変数は、プログラム内のどの関数よりも外側で宣言・定義される変数です。プログラムが起動してから終了するまでの間、常に値を保持し続け、プログラム内のどこからでもアクセスすることができます。

以下は、C言語におけるグローバル変数の使用例です。

サンプルコード

#include <stdio.h>
int s;  /* グローバル変数 */
int main () {
    int a = 15;
    int b = 20;
    s = a + b;
    printf ("a = %d\n b = %d\n s = %d\n", a, b, s);
    return 0;
}

実行結果

a = 15
b = 20
s = 35

この例では、変数 s が関数の外で宣言されているためグローバル変数となり、main 関数の中から直接参照・代入が可能になっています。

ローカル変数

ローカル変数は、関数やブロック({ } で囲まれた範囲)の内部で宣言・定義される変数です。そのブロックや関数の内部でのみ使用でき、外部からアクセスすることはできません。また、そのブロックを抜けると自動的に破棄されます。

以下は、C言語におけるローカル変数の使用例です。

サンプルコード

#include <stdio.h>
int main () {
    int a = 15;  /* ローカル変数 */
    int b = 20;  /* ローカル変数 */
    a = a + b;
    printf ("a = %d\n b = %d\n", a, b);
    return 0;
}

実行結果

a = 35
b = 20

この例では、変数 abmain 関数の内部で宣言されているため、main 関数の中でしか利用できません。

まとめ

なお、ローカル変数とグローバル変数に同じ名前が付けられた場合、そのスコープ内ではローカル変数が優先されます。変数のスコープを意識して設計することで、意図しない値の書き換えや名前の衝突を防ぎ、保守性の高いプログラムを作成できます。

  1. Pythonの名前空間とスコープの仕組みをわかりやすく解説

    Pythonでは、変数・関数・ライブラリ・モジュールなど、さまざまな「名前」を扱います。ところが、使おうとした変数名が、すでに別の変数や関数、メソッドの名前として存在している――そんな場面に遭遇することは珍しくありません。このような名前の衝突を避けるためにも、Pythonがこれらの名前をどのように管理しているのかを理解しておく必要があります。その鍵となるのが「名前空間(namespace)」という概念です。 名前空間の3つの種類 Pythonの名前空間は、大きく次の3つに分類されます。 ローカル名前空間(Local Namespace)関数の中で定義された変数や関数の名前を保持する名前空

  2. RubyのスコープとBindingオブジェクトを徹底解説!ローカル変数からクロージャまで

    スコープ(scope)は、あらゆるRuby開発者が必ず理解しておくべき重要な概念です。 なぜなら、スコープは多くのエラーメッセージや混乱の原因となるからです。 この記事では、「スコープとは何か」という基本から、ローカル変数・インスタンス変数・ブロックそれぞれのスコープの挙動、さらにはBindingオブジェクトやRailsのscopeとの違いまで、具体例を交えながらわかりやすく解説します。 スコープとは何か? スコープとは、「ある時点でどの変数にアクセスできるか」を指す概念です。 変数の種類によってスコープの広さは異なります。 ローカル変数:非常に狭いスコープを持つ グローバル変数:非常に広い