先週の制御構造の話の中で、説明できなかった、break , continue , switch-case 文について 解説を行う。break,continue では、forループのとび先などを交えて話した。
次に、変数の解説ということで、大域変数が原因で変になるプログラムの例として、 下記のようなネタを紹介しながら、大域変数が問題視される事例を紹介。
int i ; void foo() { for( i = 0 ; i < 2 ; i++ ) printf( "A" ) ; } void main() { for( i = 0 ; i < 2 ; i++ ) foo() ; }
この例を受けて、局所変数の重要性を説明し、 大域変数の寿命(起動から終了まで)、スコープ(プログラム全域)の話と、 局所変数の寿命(通常、ブロック突入から抜けるまで)、スコープ(該当ブロックの範囲内)といった 解説を行う。さらに、局所変数で static 宣言した場合の説明を行う。
次に、関数の引数の取り扱いということで、実引数・仮引数の値で一般的には、 『値渡し(Call by Value)』の原則を話す。この値渡しだけを使っていれば、 関数実行による呼び出し側への影響(副作用:side effect)を最小限にできることを説明する。 しかしながら、「大域変数は極力使いたくない」、「関数で共通に使うデータの受け渡し」 といった場合には、時として副作用も必要ということで、 ポインタを経由した書き換え『ポインタ渡し(Call by Pointer)』の話を説明する。
時間が中途半端に残ってしまったので、 C言語が、B言語→C言語→C++→Java/C#と発展していった経緯を紹介する。 特に、C++は、"Better C"(よりよいC言語)としても使われており、 今後の授業でも便利なC++の機能を織り交ぜて話をすることを前置きしておく。
話のネタで、C++の由来やC#の由来を雑談で話した。改めて、WikipediaのC#を見ると、 C#は「音楽の半音上げる」の意味や、「#は、++(改行)++の4つの+」の意味… とのネタが記載されている。ふーん….