Shammer's Philosophy

My private adversaria

スコープと変数

JavaとCではどうも変数のスコープが異なるようだ。
ネストされたブロック内でもCだと同じ変数が使えるらしい。
たとえば、


 main()
 {
  int x = 100;
  {
   int x = 1000;
   printf("%d\n", x);
  }
  printf("%d\n", x);
  return 0;
 }


Java だとこのようなことはできないが、Cだとできる。
そして、同名の変数を利用する場合は一番近くのものが利用される。
上記だと、実行結果として


 1000
 100


という順番で出力される。


文法は似ていてもこの辺の動きは異なる実行ファイルが生成されるようだ。
Javaと比較するとプログラマがいろいろ考えてやらないといけないことが多いな、やっぱり。
Cから入ると後でオブジェクト指向を身につけるのが大変とかいう話を聞くが、
こういう部分を見ているとやっぱり最初はCをやって細かいところまでしっかり把握した上で
他の言語をやるのがいいのかも、、、とか思ってしまう。
しっかり勉強せねば・・・