第5講 関数(1)
第8話 変数のスコープ
前話の謎を解くためには、
変数のスコープの話をしなければなりません。
この話はなぜC言語がプログラム言語のキングオブキングになったかと関係します。
変数のスコープとは、変数の適用範囲であることを前に説明しました。
このことを説明するためにコードを次のように変更していただく必要があります。
#include<stdio.h> //prinf()を使えるようにするためにインクルード
void f();
int main() {
  int a; //変数aを定義
  a = 3;
  printf("a=%d\n", a);
  f();
  printf("a=%d\n", a);
}
void f() {
  a = 5;
}
変更すると、
001
とaのところに赤い波線が付いてしまいますね。
そして、Ctrl+F5をすると、
002
とビルドエラーが発生します。
ビルドエラーが発せいたときには、
いいえを選択して下さい。
選択すると、一番下に
003
とエラー原因が指摘されます。
main()で
  int a; //変数aを定義
とちゃんと定義してあるのに、
aが定義されていないと出てきてしまいます。
そして、
004
右の方にエラーした文の番号がでいます。
つまり、
  a = 5;
に問題があるのだといっているわけです。
初心者の方は、箱の用途をちゃんと宣言して定義したはず!と納得できませんね。
実は、変数のスコープ(範囲)は関数内に限定されているのです。
つまり、aのスコープは
002
図の赤い
に限定されているのです。
エラーを解消するために、コードを次のように変更して下さい。
#include<stdio.h> //prinf()を使えるようにするためにインクルード
void f(); //s:初項 k:交差 m:末項
int main() {
  int a; //変数aを定義
  a = 3;
  printf("a=%d\n", a);
  f();
  printf("a=%d\n", a);
}
void f() {
  int a; //変数aを定義
  a = 5;
}
今度は赤い波線も消えてビルドエラーも発生しませんが、
実行結果は、
a=3
a=3

です。
どうして、
  a = 5;
が生きないのでしょうか。
理由はおわかりですよね。
そうです。スコープです。
003
スコープすなわち変数の適用範囲は基本的に関数内に限定されている!です。
同じ名称のaでも実は、別の箱です。
箱は社員専用の箱でして、
他の社員は使うことが原則として出来ないのです。
社長が用意した箱や社員が用意した箱は、
その用意した人専用の箱なのです。
前話で引数を使い値を渡しましたが、
実は箱そのものを渡したのではなく、
あくまで箱の中身の値を渡したのにすぎないのです。
基本的には箱は用意した社員専用ですし、
箱は渡せないのです。
絶対的な権限を持つ社長であるmain()でさえ、
社員の箱を勝手に使うことは出来ないのです。
スコープを関数内に限定した−−−これがC言語がキングオブキングになった最大の理由です。
(しかも、基本的には他の社員が用意した箱は使えないはずなのに、
許可を与えて使用をさせる方法も考えたことが、
C言語がながらく愛されてきた理由なのです。
箱は渡せないのに、箱を使用することを可能にする魔法の方法を
C言語は備えているのです。
魔法を使うにはポインタが必要です。
ですから、第7話までお待ちいただく必要があります。)
どうして、スコープを関数内に限定した、
つまり、箱を社員専用のものにしたことが、
C言語の成功の素になったのでしょうか。


第7話へ   第9話へ
 
002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ