久しぶりに、Cのお勉強。
僕自身、そんなにまじめに勉強したことがないので、きちんとやらなきゃと思いながら…
でもって、2~3年くらい前に買った本を久しぶりに開いてみた。
当時よりも幾分Cの知識はあるし、ワリとサクサク進む。
しかし…
ところどころ動かないんですけど?
でもって、版元のサイトを調べると、サンプルソースがダウンロードできるね。
改訂後
http://www.sbcr.jp/books/download/art.asp?newsid=1333
改訂前
http://shop.sbcr.jp/isbn/old/1st/linux/index.htm
実行すると画面がクリアされ、中央ほどに簡単なメニューが表示されるというプログラムがある。
サンプルどおりに打ち込んでコンパイル、実行するのだが、一向に画面が変わらない。
入力待ちになる。
ここでENTERとかなにかキー入力をすると、画面がクリアされ、メニューが表示される。そして誤った入力である旨、表示される(メニューとしては、「a」「d」「q」しか許可していないため、先ほど入力した値を受け取って誤りだと出力する)。
でもって改訂版のソースを見ると、
fflush(out);
が追加されている。
※outは出力先(この場合は標準出力)を指す。
こいつが無いせいで画面が切り替わらなかったんだな。
しかもtputsの第3引数用に関数char_to_terminal()というのを設定しているのだが、この引数の型が改訂前後で違う。
改訂前
int char_to_terminal(char char_to_write);
改訂後
int char_to_terminal(int char_to_write);
おーい!
とか思ってたら、このchar_to_terminal()は単純にputcをコールしてるだけ。
よくよく考えてみると、このputcって第1引数(つまりchar_to_terminal()の第1引数)はintなんだよねぇ。
これはすぐに気が付いてもよかったなぁ。
古いOS(もしくはコンパイラ)だったら動くんか?
まぁ、とにかく、これは注意せねばならんね。
こっちは僕の持っている改訂前。
0 コメント:
::コメントを投稿する::