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

C言語における変数のスコープとは?静的スコープの仕組みを解説

C言語における変数のスコープ

ここでは、C言語における変数のスコープがどのように決定されるのかを解説します。C言語では、変数は常に静的スコープ(静的束縛)として扱われます。つまり、ある名前の変数がどの実体に結び付けられるかは、プログラムのソースコード(テキスト)を見るだけで判断でき、実行時の関数呼び出しスタックには依存しません。

具体的な例を見てみましょう。

サンプルコード

# include <stdio.h>
int x = 0;
int my_function() {
    return x;
}
int my_function2() {
    int x = 1;
    return my_function();
}
int main(){
    printf("The value is: %d\n", my_function2());
}

実行結果

The value is: 0

解説

このプログラムの出力は「0」になります。my_function() を実際に呼び出しているのは my_function2() ですが、my_function() の戻り値は呼び出し元の関数には一切依存しないためです。my_function() 内で参照される x は、常にグローバル変数の x(初期値 0)に結び付けられます。

もし C言語が動的スコープを採用していた場合、呼び出し元である my_function2() 内で宣言されたローカル変数 x(値は 1)が参照され、出力は「1」になっていたはずです。この違いこそが、静的スコープと動的スコープの本質的な差であり、C言語では変数の結び付けがコンパイル時に確定する点が重要なポイントです。

  1. JavaScriptでブロックスコープ変数を宣言するには?letとconstの使い方を解説

    ブロックスコープ変数とはJavaScriptでブロックスコープ変数を宣言するには、ES2015(ES6)で導入された let および const キーワードを使用します。これらのキーワードで宣言された変数は、{ }(波括弧)で囲まれたブロックの中でのみ有効となり、ブロックの外からアクセスしようとするとエラーが発生します。let と const の違いlet は値の再代入が可能な変数を宣言するキーワードで、const は再代入ができない定数を宣言するキーワードです。どちらもブロックスコープを持つため、従来の var(関数スコープ)と異なり、意図しない変数の上書きや漏れを防ぐことができます。特別な

  2. Androidでグローバル変数を宣言する方法【シングルトンパターンで実装】

    Androidにおけるグローバル変数の宣言方法本記事では、Androidアプリ全体で共有できるグローバル変数を宣言する方法を、実際のサンプルコードとともにわかりやすく解説します。AndroidにはJavaなどの言語にあるような厳密な意味での「グローバル変数」は存在しませんが、シングルトンパターンを利用することで、アプリ内のどこからでもアクセスできる変数を実現できます。手順1:新規プロジェクトを作成するAndroid Studioを起動し、「File」⇒「New Project」を選択して、必要事項を入力して新しいプロジェクトを作成します。手順2:レイアウトファイル(activity_main.