関数の話が出てきました。関数を作った際、変数はどこで宣言してやればいいのでしょうか。今回はこんな事を話していきます。
以下が今回の要点です。
では、いってみましょう。
前々回に main も関数だと言いました。で、今まで変数の宣言を main の { } の中に書いてきました。
つまり、関数の中で変数の宣言ができることは確かです。
実は、もう1つ変数の宣言できるところがあります。って、もう1ヶ所しか残ってませんね(笑)。そうです。関数の外でも変数の宣言ができるのです。
この2つには大きな違いがあります。次のプログラムを見てください。ちなみに、このプログラムはビルドエラーが出ます。
| プログラム | エラーコード | 
|---|---|
| // Val3.cpp
#include <iostream.h>
int a = 0;
void Test()
{
    int b = 1;
    cout << a << b << c << d << endl;
    return;
}
int c = 2;
int main()
{
    int d = 3;
    Test();
    cout << a << b << c << d << endl;
    return 0;
} | 'c' : 定義されていない識別子です。 'd' : 定義されていない識別子です。 'b' : 定義されていない識別子です。 | 
どうやら、Test の中では c と d が、main の中では b が使えないようです。
つまり、関数内で宣言された変数は関数外では使えないようです。
また、関数外で宣言された変数でも、その変数を宣言する前までに書いた関数では使えないようです。
この2つの変数にはさらに違いがあります。
| プログラム | 実行結果 | 
|---|---|
| // Val4.cpp
#include <iostream.h>
int a = 0;
void Inc()
{
    int b = 0;
    a++;
    b++;
    cout << a << " <- a | b -> " << b << endl;
    return;
}
int main()
{
    Inc();
    Inc();
    Inc();
    return 0;
} | 1 <- a | b -> 1 2 <- a | b -> 1 3 <- a | b -> 1 | 
あらら、b のほうはいつまでたっても 1 のまんまですね。このように、関数内で宣言した変数は毎回初期化されます(初期化に関しては第6章を参照)。ですが、関数の外に書いた変数は最初に初期化されるだけです。
また、初期化処理を書いていない場合は、関数の外に書いた変数は 0 に勝手に初期化され、関数内で宣言した変数は何が入っているか分かりません。
「あれ? 前に使っていた値が残っているのでは?」と思った人もいるかもしれませんが、基本的に関数内で宣言された変数の中身は、関数を出ると破棄されます。条件によっては同じ値が入っていることもありますが、それを仮定したプログラムは絶対に組んではいけません!
以上のように、関数の外で宣言された変数を外部変数またはグローバル変数と言います。一方関数の中で宣言された変数を内部変数と言います。
今回は一度にたくさん話しすぎた気がします。なので、今回のことは次回以降にも少しずつ話に織り込んでいきたいと思います。
では、今回の要点です。
また次回まで。さようなら。
Last update was done on 2000.6.17
この講座の著作権はロベールが保有しています