トップ  >  リファレンス  >  基本  >  変数  >  変数の可視範囲と有効期間
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
変数のスコープ(可視範囲)と有効期間


スコープは、ローカルスコープとグローバルスコープの2タイプあります。

全ての関数の外に宣言された変数はグローバルスコープです。
このようなグローバル変数は、プログラムのどこからでもアクセス出来ます。
グローバル変数はグローバルメモリプールに配置されるので、その有効期間はプログラム存在期間と一致します。


ブロックの内側({}で囲まれたコード)で宣言された変数はローカルスコープです。
このようなローカル変数は、ブロックの外側からアクセス出来ません。
ローカル宣言の一般的なケースは、関数内で宣言された変数です。
ローカル変数のメモリはスタック上に配置されるので、変数の有効期間はその関数が終了するまでです。


ローカル変数のスコープは、ローカル変数が宣言されたブロックなので、
他ブロックで宣言された変数と同じ名前の変数を宣言する事が可能です。
同様にグローバルレベルまで上のレベルで宣言された変数と同じ名前を使用する事が可能です。


ローカル変数はstatic修飾子で宣言する事が出来ます。
この静的ローカル変数のメモリはグローバルプールに配置されます。
つまり、静的ローカル変数の有効期間はプログラム存在期間と一致します。
但し、スコープは静的ローカル変数が宣言されたブロックに限定されます。


サンプルソース:
#property strict

void OnInit(){

    int icount;
    icount = 10;
    
    for( int icount = 0 ; icount < 2 ; icount++ ) {
        int lastcount =icount;
        Print(icount);          // 0,1表示(forループ内のicount)
    }

    Print(icount);              // 10表示(forループ外のicount)
    Print(lastcount);           // エラー。lastcountのスコープはforループ内のみ

}


サンプルソースのforループ例について。
forループ行で同じ名前の別の変数(icount)を宣言していますが、この変数のスコープはfor式とforループ内だけです。
またforループ内部で宣言した変数(lastcount)のスコープは、このforループ内だけです。

スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system