C言語の航海日誌(3)
少し日が空きましたが、写経は少しずつ進めていて、前回から今日までに8本のサンプルコードを写経しました。
ページで言うとp101〜157まで。
全340ページなので、もうすぐ半分に辿りつきそうです。
写したコードは、たとえば以下。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *in_fp; FILE *out_fp; int ch; /* 入力用のファイルポインタの取得 */ in_fp = fopen("data.txt", "r"); if (in_fp == NULL) { fprintf(stderr, "ファイルが開けません\n"); exit(1); } /* 出力用のファイルポインタの取得 */ out_fp = fopen("out", "w"); if (out_fp == NULL) { fprintf(stderr, "ファイルが開けません\n"); exit(1); } while ((ch = getc(in_fp)) != EOF) { putc(ch, out_fp); } /* 使い終わったファイルポインタを閉じる */ fclose(in_fp); fclose(out_fp); return 0; }
ポインタへの変数が出てきていますが、じつはまだこの段階ではポインタの解説は始まっていなくて、書中ではひとまず「おまじない」として扱うよう言われます。
実際にポインタの解説が始まるのはさらに40ページ以上先に行ってから。
このサンプルコードにおけるメイン・トピックは、fopen関数(ファイルのオープン)です。
ぼくは大体、Cのサンプルコードを写しながらいつも「Perlだとどうなんだっけ」と頭の中で比べているんですが、そういう比較対象というか参照軸がひとつあると、また印象に残りやすい気がしています。
で、CとPerlだとほとんど同じように考えられるものもあれば、ちょっと違うな……みたいなものもあって、このファイル入出力の関数は後者かなと。似ているところもあるけど、違って感じられる要素のほうが多いというか。
ちなみに、ほとんど同様に使えるなと思ったのはif文、while文あたりです。
*
もう一つ、これも印象的なトピックでした。
#include <stdio.h> int main(int argc, char **argv) { int i; for (i = 0; i < argc; i++) { printf("argv[%d]: %s\n", i, argv[i]); } return 0; }
ポインタが2重にくっついていて、それについては上記同様、ここでも「おまじない」扱いですが、コマンドライン引数の受け取り方を少し把握できた気がします。
*
この後は、仮引数の使い方、関数の分割、プロトタイプ宣言などを学んで、その後にようやくポインタが出てくるようです。
ポインタについてはすでに同書を含む書籍の通読や、ドットインストールを通して概要はチェック済みですが、実際に手を動かしながら理解していくのはこの後なので、楽しみです。
C言語体当たり学習 徹底入門 (標準プログラマーズライブラリ)
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/05
- メディア: 単行本
- クリック: 6回
- この商品を含むブログ (6件) を見る