0memo/2011_2_17

Last-modified: 2011-02-17 (木) 22:26:41

今回から実践的なもの以外は省略していこうと思います。
ていうかソースコード実際に書かないと勉強したきがしない。

#include <stdio.h>
int main(void){
	int a = 10;
	double b = 3;
	printf("結果は%f\n",a / b);
}

実行結果:

結果は3.333333
続行するには何かキーを押してください . . .

このままだと問題なくコンパイルできますね。


ですが、こうすると…

#include <stdio.h>
int main(void){
	int a = 10;
	{
	double b = 3;
	printf("結果は%f\n",a / b); //①
	}
	printf("bの値は%f\n",b); //②
}

①は問題なく実行され、結果も表示できます。
しかし、②はコンパイルエラーで表示できません。
これは関数の有効範囲(スコープ)が原因です。


変数を宣言したブロック({~})内のみがスコープとなります。
つまり、

int main(void){
	int a = 10; //aを宣言、スコープを開始
	{
	double b = 3; //bを宣言、スコープを開始
	printf("結果は%f\n",a / b); //①ここはaとb両方のスコープ。
	} //bのスコープ終了
	printf("bの値は%f\n",b); //②ここはbのスコープではない。
} //aのスコープ終了

となります。