2007年8月28日火曜日
「Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて」でお勉強

久しぶりに、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 コメント | コメントを書く
Template Design: © 2007 Envy Inc.