1.10 スコープ Menuへ戻る


      変数にはその有効区間というのが必ずあります。これを勘違いすると混乱して
    しまうので注意が必要です。この有効区間の事をスコープと言います。次の例を
    見て下さい。

    #include <stdio.h>
    void Message();

    void main()
    {
        int i;
        i = 10;

        Message();
    }

    void Message()
    {
        printf("%d\n",i);
    }

      コンパイルしてみたらわかりますが間違いです。main で定義された i は実は
    main の中だけで有効な変数なのです。だから Message の中で使うと怒られるの
    です。という様に変数には有効区間(スコープ)があります。

      では、どういう風にスコープが決められるかというと変数が宣言された場所を
    囲む{と}の間だけがスコープです。つまり次のプログラムはエラーです。

    #include <stdio.h>
    void main()
    {
        {               /*                           */
            int i;      /*  この中だけ i のスコープ  */
        }               /*                           */
        i = 50;
    }

      わかったでしょうか?では、全ての関数の中をスコープとする変数(これを
    一般にグローバル変数という)はどのようにすれば作れるでしょうか?これは
    見たことあるでしょうが、 main 関数の外に書けばグローバルスコープな変数
    を作れます。

    #include <stdio.h>

    int iItem;

    void Message();
    void main()
    {
        iItem = 50;         /* ここでも代入できる */
        Message();
    }

    void Message()
    {
        printf("ITEM = %d",iItem);  /* ここでも参照できる */
    }

      では、次のプログラムがどうなるかわかるでしょうか?

    #include <stdio.h>

    int iItem;
    iItem = 100;

    void main()
    {
        int iItem;
        iItem = 50;

        printf("iItem = %d",iItem);
    }

      これはコンパイラを通ります。内部的には別の変数として考えています。
    では、同じ名前の変数を指定した時にどちらを使われるかというのが問題に
    なります。

      それは、よりローカルな変数を使う様にします。 main の中でのローカル
    変数 iItem がグローバル変数 iItem より優先されて使われるのです。

      ま、間違ってもこの様な同じ名前を持つ変数など使わない事です。これは
    くれぐれも忘れないように。

      では、長らく続いたC言語・簡単入門は終わりとします。そろそろ退屈に
    なってきている人もいるようですので。駆け足でざあっと仕様の説明をしま
    したが、いくつか無視している事があります。個人的には知らなくてもいい
    と思うし、ワタクシも知りません。

      ただ、もしかしたら、そういう物が出てくるかも知れません。そういうとき
    はヘルプファイルを見て理解します。これから先わからない事があまりにも
    多いです。しかしヘルプファイルは偉大です。私もヘルプなしではプログラム
    を書けません。ヘルプファイルに慣れましょう。

      次はいよいよ実践的な Windowsプログラミングです。当初、予定していた
    MFCを使ったプログラムは後ろにまわして C + SDK でいきます。今回
    と同じ様に10回〜12,3回で JETでも作りますか。何か作りたいソフ
    ト、ツールがあれば言って下さい。ではお楽しみに