わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ブロックの途中で宣言している変数があります

情報ネットワーク演習のコードレビュー結果は,各学生に通知しました.1日半おいてから,どんなことを指示したか,見直してみました.
何人かに,「ブロックの途中で宣言している変数があります.」と指示しました.さらに「途中で宣言してコンパイラエラーにならないのは,GCCというコンパイラの独自拡張です.」という補足を書きました.
この補足は,ある意味間違いであることを認識して書いています.「GCCの独自拡張」だったのは事実ですが,ブロックの途中で変数を宣言することは,C99の規格で認められています.
C99ではそのほかに,「//」のコメントも使用できるようになりました.Javaでは当たり前ですし,私のC言語の講義・演習でも使ってきました.
それから,配列宣言時に,そのサイズ(要素数)として,任意の式が書けるようになっています.この「動的にサイズを決められる配列」は,これまでのCプログラミング教育の根底を覆すものになる*1ので,C99に基づいたプログラミング指導は時期尚早early in the dayだなという結論にしています.
ただ,情報処理IIの授業の中で,さらにプログラミングをしていく学生へのメッセージとして,さまざまなコンパイラやCの規格があることを触れたいとも考えています.14回目は演習,15回目は試験なので,実質的な講義はあと2回です.
(追記) あるLinux環境でman gccをしたところ,興味深い情報を見つけました.

  • C99でコンパイルしたければ,「-std=c99」オプションをつける.
  • デフォルトは「-std=gnu89」で,C90という規格に,GNU extension (GCCの独自拡張)を加えたもの.
  • 「-std=gnu99」は,C99という規格にGCCの独自拡張を加えたもので,これが将来的にはデフォルトになるだろう.

*1:私の科目で,動的にサイズを決める配列を活用したとき,上の学年の演習や,研究室でのプログラミングで,その書き方になじめない先生・先輩に当たるとまずいですね.