Global & Local Area

Global Area & Local Area と for文の変数宣言です。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. ソースプログラムです。
    ファイル名 説明
    Scope1.cpp Global & Local Area
  2. Global Area の説明です。
    g1 と g2 の領域を宣言しました。
    Global Area では、初期値を設定しないとゼロでクリアされています。
    //Global Area
    int     g1 = 123;
    int     g2;
    
  3. 関数 func1() の中で、v1 と v2 の領域を宣言しました。
    v2 は static で宣言されているので、Global 領域で宣言した時と同じように扱われます。
    古いバージョンでは Local Area で初期値の設定は出来なかったのですが、現在では許されています。
    Local Area は関数が呼び出される度に確保/破棄されるので、初期値の設定は避けるべきかも知れません。
    初期値が設定されていない Local Area の値は不定です。
    v1 は関数が呼び出される度に 5 が格納されるのに対して、v2 はプログラムの開始時に 3 が設定されるだけです。
    g2++; v1++; v2++; の効果を確かめて下さい。
    void  func1(void)
    {
        int         v1 = 5;
        static int  v2 = 3;
        printf("g1=%d g2=%d   v1=%d v2=%d\n",g1,g2,v1,v2);
        g2++;
        v1++;
        v2++;
    }
    
  4. プログラムの開始直後に Global Area の g1,g2 を印字してみました。
    g2 は初期値を設定しないので、ゼロでクリアされています。
    続いて func1() を三回呼んで、g2++; v1++; v2++; の効果を確かめてみました。
    int main(void)
    {
        printf("%d %d\n",g1,g2);
        func1();
        func1();
        func1();
    
  5. 関数 func2() では Local Area の宣言位置と参照位置の関係について説明します。
    j= 7; の時点では j が宣言されていないのでエラーになります。
    次に for文の中で変数 i を宣言しています。
    for() で宣言された i は for文の中だけで有効なので、i=3; は新しいバージョンではエラーになります。
    ちなみに古いバージョンでは、一度 i が宣言されるとその行以降では使えたのですが。 (^_^;)
    int j = 12; で宣言された j は、この行位置以降で有効になります。
    void  func2(void)
    {
    //    j= 7;   //error
        for(int i=1; i<4; i++)  printf("  %d",i);
        printf("\n");
    //    i= 3;   //error
        for(int i=5; i<9; i++)  printf("  %d",i);
        int j = 12;
        printf("\n%  d\n",j);
    }
    
  6. プログラムの実行結果です。
    g2, v2 がインクリメントされていることに注目して下さい。
    123 0
    g1=123 g2=0   v1=5 v2=3
    g1=123 g2=1   v1=5 v2=4
    g1=123 g2=2   v1=5 v2=5
      1  2  3
      5  6  7  8
     12
    

超初心者のプログラム入門(C/C++)