2013/02/06

C言語 半年振りにやってみて

まとめ作業は大事

プログラムをしないで半年経ってしまったが、昨年末から少しやり始めている。半年前にC言語を体系的に学習してBlogにアップしていたので、それを見ればちょっとしたプログラムはすぐに組めた。作ったプログラムはこちら。後から見ることを前提に、まとめておくのは有効だと思えた。

C言語はやっぱり軽い

開発環境はMeadow(テキストエディタ)でコードを打って、GCCを使ってコンパイルしてexeを作っている。このお手軽さに慣れてしまうと、もうJavaには戻れそうもない。

Javaの開発にはEclipseを使っていたが、あれが重い。開発環境はそれなりに巨大で動作がもっさりしている。それに起動も遅く、思いつきで何か書こうという気にならない。出来たアプリケーションのファイルサイズこそ小さいものの、起動は遅く、メモリは最低30MBぐらい使ってしまう。小さなアプリをたくさん作るという向きの言語ではないね。また最近ではJavaの脆弱性が頻繁に問題になっていて、Blog上にJavaAppletを載せるのもどうかという気がしてきた。いろいろJavaの使勝手の悪さが気になりだしてしまった。GUIも簡単にできるし、いろいろ便利で好きな言語ではあるのだが・・・

それに対してC言語 ANSI C89の範囲で作ったアプリは、すべてが軽い。特に最終的に出来たアプリはexeファイルサイズが小さい。GCC の「-s」オブションを兼用することで10KB前後(オプションなしだと50KB前後)になる。さらにネイティブなので高速に起動し、高速に処理をする。この差は大きい。やりたいことが結構重い処理である音声ファイルの加工だったりするので、C言語が適当だろう。今のところサクサク動くコンソールアプリ(CUI)で不満はない。そのうちwxWidgetsなどを使ってGUIアプリに手を出すかもしれないが、ちょっと試したところファイルサイズが大きすぎて魅力がない。それにGUIの必要性もあまり感じていない。GUIが欲しいアプリを作る場合は、やっぱりJavaを使うかな。

C言語で出来ないこと

GUIは簡単ではない。Windowsであれば、結局Windowsのライブラリを利用するしかない。wxWidgetsを使っても同じこと。純粋なC言語の範囲ではコンソールアプリしか作れない。それでもドラッグ&ドロップでファイル処理とかできるので不便は感じない。
音の入出力が困難。やっぱりOSが提供するものを利用する必要があるので、OpenAL (Open Audio Library)など、各種ライブラリを使いこなす必要がある。素直にVisual Studio C++とか使えば、Winodowsの機能をいろいろ使えるのだが、気が進まない。結局C言語で音の入出力はあきらめている。今後もファイル操作の範囲で作っていくつもり。

C++

C言語の拡張版であるC++に関しては、オブジェクト指向を必要とするような複雑なソフトを作るつもりはないので、今のところやるつもりはない。ただ、C++で書かれたソースを読むということはあるので、ある程度理解はしておきたいとは思う。またオブジェクト指向そのものには興味はあるので、そういう意味でやるかもしれない。
マイクロソフトのVisual Studio C++はやりたくない。無料でできるExpress Editionがあるのだが気が進まない。同じC系言語でも別物という印象。マイクロソフトのライブラリを使いこなす必要があるので、独特な作法が嫌なのと、開発環境が超巨大すぎる。ディスクの空きスペースがいくらあっても足りないわ。ハードディスクを開発環境で埋めるつもりはない。

C言語は古臭い

枯れ切った言語にも関わらず、多くの場面で使われ続けている。C言語は高級言語と言われているが、ローレベルで動く高級言語という妙な位置にある。これが他の言語にはない強みだろう。C言語よりも上のところで動く言語はいくらでもあるが、C言語と同じ位置の言語はおそらくなく、ローレベルで動くのはアセンブラぐらいしかない。汎用性ではC言語が圧倒的に優れている。またC言語に置き換わるような言語は今後もできないと思う。そう考えると20年後でもC言語はほとんど変わらず健在という気がする。

C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら