日々常々

ふつうのプログラマがあたりまえにしたいこと。

"3日で学ぶC言語"を3日でやってみた

前提

C言語を触ったことはありません。ベースとなる知識はJavaになります。C++C#は業務で解析したことはありますが、単純なロジックを追っただけなので言語的な特徴なんてさっぱりです。

日経ソフトウエア 2010年 11月号 [雑誌]

日経ソフトウエア 2010年 11月号 [雑誌]

1日目:1時間50分

内容的に難しい事は何も有りませんでした。VisualStudioのダウンロードとインストールに50分かかった事と、1サンプル毎に1プロジェクトを作るスタイルのお陰で無駄な時間を食ったくらいです。よく判らないから手順の通りに、とやってるとえらい手間です。「これならVisualStadio使わずにすべてコマンドラインでやった方がましなのではないか」と思いました。

2日目:1時間40分

  • ポインタ
  • ポインタのポインタ
  • 動的なメモリ確保

よく難関と評されるポインタについて。malloc/callocは確保したメモリ空間を示すポインタを返す。返されたポインタをポインタ変数に格納し、ポインタ変数を介してメモリに文字列を格納する。判らなくは無い。判らなくは、無い。確保したメモリ空間はポインタを介して開放する。ポインタ変数への格納忘れたら開放出来ないのね?
ポインタはメモリの一部を指すものだから、文字列でもポインタでも何でも指すことが出来る。ポインタのポインタは単純にそれ。つまりポインタのポインタのポインタのポインタなんて物も作れr……実際はポインタが指してる対象がポインタでも、それが指してるものは何でもいいだろうから、単なるポインタのポインタで済むのかもしれない。もっとも、そんな構造になったら色々考え直すべき。
ポインタのインクリメントで次を指すってのが判りにくい。ポインタはメモリの位置とサイズを持ったオブジェクト、かな。インクリメントすることで持っているサイズ内の次を示すようになる?この辺りは曖昧なまま。そもそもこの特集では説明してないような。

3日目:1時間30分

  • ラインエディタの作成

メモリ操作を丁寧にしないといけませんよ、程度に読み取りました。ユーザからの入力を受け取って云々するところは、単なる実装方法だけの話なので軽くスルー*1。2日目までは短いコードだったから違和感を覚えながらも何とか流していたけれども、流石にこの長さでこういうコードは厳しいです。正直止めようと何度思ったことか。3日目が一番内容薄いと思います。書いてることは難しいかもしれませんが、組み立てれば良いだけなので、目新しいことはありません。

まとめ

C言語は学ぶ価値はあります。やって見ないとCプログラマの言い分が全く理解出来ないからです。やってみれば、ある程度判らなくも無い程度には成れます。しかしながら、C言語自体に学ぶ価値があるかと言われると、正直この特集からはそうは思えませんでした。C言語の表面に触れるだけで、JavaRubyC#等の理解が深まるかと言われるとNOと言わざるを得ません。勿論"表面に触れるだけ"と言う前提はさせて貰いますが。「昔のコーディングは大変だったんだなー」と言う感想を持って、年配の方とのコミュニケーションツールとして学んでおくのはメリットにはなるのでは無いでしょうか。

*1:てーかバグだろこれ、と思わなくは無い。