2008年7月5日土曜日

終局

終局である。

ああ、やっぱり本を読み切ると嬉しい!!
達成感なのかな。今日は飲もう!

さて、読んでみて、この本に対する感想は、

  • 簡にして要を得ている、とはこのことだと思います。
  • 無用な遊びのない、枯れた本ですね。
  • 識別子とオブジェクトのあたりを箱を使って説明するのは、まあしょうがないのだと思います。入門者向けの説明としてはベストプラクティスなのかと。
  • 共用体と関数ポインタが割愛されていたのは残念。
  • それ以上のことは、今後私がC言語を使っていって成長した後に振りかえってみてみないと評価できないです。

です。

この本を読んで私自身はどう変わったのかなぁというと、

  • C言語の言語としての基本がわかりました。
  • 写経をたくさんしたので、書きぶりがある程度身につきました。

ということ。そして、並行して道具箱とパタヘネをやっていたので、

  • CUnitとGDBが多少使えるようになった。
  • cc-modeとgdb-modeが多少使えるようになった。
  • MIPSアーキテクチャとC言語のそれぞれの部分がどのように関係しているか見えてきた。

ということだった。

一応これで「C言語入門者です」と言えるようにはなったかな、と。
で、初級者にいくには何が必要かなと考えてみました。こんな感じ。

  • 共用体と関数ポインタの学習。
  • ANSI Cの標準ライブラリの理解。
  • C言語によるデータ構造とアルゴリズムの習得。
  • 規模の大きいプログラミングのためのモジュール化やライブラリのあり方。
  • 写経を続けて、体で書きぶりを覚える。

次に中級者にいくには少なくととも次のものが必要かと。

  • OSのAPIの理解。
  • OSの理解。
  • 実用されているソフトウエアについてのコードリーディングの経験量。
  • 実用されるソフトウエアノコードライティングの経験量。


まだまだ未熟なんですが、先が長いということは楽しみがたくさん待っているということなので、こつこついくかなぁ。
さて、この本につづいてC言語的には何をするかというと、

  • 知識を増す

    • 初級プログラマとして不足している知識を得る
      「新版 明解C言語 実践編」
    • データ構造とアルゴリズムを学ぶ
      「新版 C言語によるアルゴリズムとデータ構造」

  • 体で覚える

    • 「解きながら学ぶC言語」


という方針でいこうと思います。

なお、記事は計算機とその周辺の方に書いていきます。

第13章 ファイル処理 (その2)

最終節。


  • 13-2 テキストとバイナリ

    • list1308。fprintfするのを、"%f"から"%.20f"にしたら、テキストでもまあマシになったが、小数点以下20桁全部正しくは保存されない。なぜ? doubleの精度の限界かな。
    • prac1312。書き込むときは、struct tm型のオブジェクトがメモリ上に整列しているとして、fwrite(local, sizeof(int), 9, fp)でいけちゃう。でも、これって常に保証されているとしていいのかなぁ。



ついに、終了! :)

第13章 ファイル処理

こつこつ。


  • 13-1 ファイルとストリーム

    • Cのファイルからの文字列読取り(fscanf etc)って、なんつーか簗漁みたいなもんなんだね。
    • fscanfとfprintfが、readerとwriterというかなんというか。
    • この節、長い。。。
    • ファイルを扱うからって、「実用的」になるという観点はちょっと疑問。



最終節へ。

2008年7月4日金曜日

第12章 構造体 (その2)

こつこつ。


  • 12-2 メンバとしての構造体

    • 構造体に対する同じ(ような)操作が、c.px、c->pxというように二通りにかけるのは、なんだかなぁ。
    • 関数に対して、構造体をポインタ渡しじゃなくて値渡しみたいなことできるのかな??



この節、みじかし。

つ、ついに最終章へ!

2008年7月3日木曜日

第12章 構造体

こつこつ。


  • 12-1 構造体

    • バブルソートをCで書くと難しい。。。バブルソートの考え方はすぐにわかるんだけど、list1201の手順がそれを確実に実現しているかを確認するのが手間。慣れなのかなぁ。
    • くわえて、構造体を学ぶというときに、そういうアルゴリズムの初見となるというのどうなのかなぁ。
    • 構造体は、オブジェクト指向をかじっていれば考え方は難しくないな。歴史は逆なんだろうけど。
    • ラベル名、タグ名、メンバ名などで同じ識別子を使えることを「名前空間が異なる」というのは不思議な感じ。シンボルテーブルが別ということではあると思うのですが。
    • おお。構造体同士の代入演算では、メンバの値が自動的のコピーされるのか。
    • 「共用体および、関数を指すポインタについては、『入門編』の範囲を超えていますので、本書では解説していません。」なんと。
    • list1209。wday_name[][3]だと、出力がおかしいので、wday_name[][4]とした。UTF-8だからかな?



ふー。この節、長かった。

2008年7月1日火曜日

第11章 文字列とポインタ(その4)

こつこつ。


  • 11-3 文字列を扱うライブラリ関数

    • gdbでいろいろ探ってみると、どうやら文字列をポインタらしく扱うときにポインタstrとtmpが同じ文字列(文字列のために確保したメモリ「領域」のどこか)を指しているとして、*str = *tmp とするのは御法度みたい。。。
    • と思ったら、テストケースをchar *str[] = { "", "a", "1", "1a", ...とかやって用意していたので、単純に文字列リテラルは書き換え不能というだけだった。。。マヌケ
    • で、演習1106をやっていてハタと気付いたのですが、これ、P159の整数型リテラルとP173の浮動小数点型リテラルのインタプリタを作れって問題だよね??? すいません、この本でここまでに提示された知識だけでそれをやるのは、勘弁。。。



というわけで、なんと次は構造体。
残り2章!

2008年6月30日月曜日

第11章 文字列とポインタ(その3)

こつこつ。


  • 11-3 文字列を扱うライブラリ関数

    • う、演習1105がBus errorになってしまう。これ、配列でやったときも苦しんだような。
    • せっかくなので、道具箱のGDBを勉強してみることにする。