CODE COMPLETE によると、プログラミングを上達するには日頃から よく読むこと (マニュアル・書籍・他人のソースコードなど) とよ く考えることが肝要だそうです。
何か耳寄りな情報があれば教えてくださいませ。 (本ページの内容はかなり古くなっています)
目次
書籍
書籍の情報は 別の場所に移しました。
インターネット上の文書
- Programming in C *
- C言語についての網羅的な情報源。
- Steve Summit: C Programming FAQs: Frequently Asked Questions *
- 書籍版の 3/4ほどの内容。
- 情報源: Web版,
日本語訳,
日本語訳のHTML版
- Henry Spencer: The Ten Commandments for C Programmers *
- Cプログラマの十戒。古語調がおもしろい。
- Rob Pike: Notes on Programming in C *
- コメントについての言及がおもしろい。短いが内容は濃い。
- Indian Hill C Style and Coding Standards as amended for U of T Zoology UNIX *
- Bell研の C書法。Henry Spencer による注釈つき。
- Recommended C Style and Coding Standards *
- ftp://ftp.cs.toronto.edu/doc/programming/ *
- ここにはプログラミングに関するいろんな文書が置かれている
- GNU Coding Standards *
- ソースコードの書式は変だと思うけど、他は納得できる。 日本語訳は gnujdoc にある
- Phinloda: Cプログラミングの秘訣 *
- スタイルについて丁寧に解説している。
- 樋口 証: デバグのためのヒント集 *
- gdb, strace, gprof, efence といったツールの使い方を解説。
- The International Obfuscated C Code Contest *
- 醜いCコードの国際コンテスト
- Eric S. Raymond 編: Jargon File Resources *
- Cと直接は関係ないけど。
- The Stony Brook Algorithm Repository *
- アルゴリズムの情報源。
- C ユーザーズガイド *
- SunのCコンパイラの説明書。
- DEC C言語リファレンス・マニュアル *
- DECのCコンパイラの説明書。
- gnujdoc *
- GNUのツールのマニュアル日本語訳。 2000-10-12の時点で autoconf, automake, bison, cvs, elisp, emacs, flex, gdb, grep, gzip, hurd, standards, texinfo, textutils, wget がある。 すばらしい。
ライブラリ
- GLib *
- Cプログラミングでよく使うデータ構造が一式、提供されている。 使わなければ損 (車輪の再発明を避けよう)。 Cによる手軽なオブジェクト指向のいい見本。 元々は GTK+ の一部だったようだ。
- 情報源: 入手先,
dW : Linux : GNOMEnclature: GLib の驚異
- zlib Home Page *
- 圧縮ファイルを扱うためのライブラリ。gzip と同じアルゴリズム。
- A garbage collector for C and C++ *
- 汎用ガーベッジコレクタ。w3m や mozilla で使われている。
- 情報源: Boehm GCを使おう
- The XML library for Gnome *
- GNOME で使われている XMLライブラリ。
- libiconv - character set conversion library *
- iconv(3) が存在しないシステムで iconv(3) を使えるようにする。
- libutf8 - a Unicode/UTF-8 locale plugin *
- UTF-8 の localeに対応していないシステムで UTF-8 localeを使えるようにする。
- The lispreader library *
- S式を手軽に扱うためのライブラリ。
- Guile - GNU Project - Free Software Foundation (FSF) *
- Guile Schemeの全機能をライブラリとして利用できる。
- Libsafe: Protecting Critical Elements of Stacks *
- buffer overflowの攻撃を防ぐためのライブラリ。
ツール
- GCC Home Page *
- GNUのコンパイラ。GCCは GNU Compiler Collection の略。
- gdb - GNU Project - Free Software Foundation (FSF) *
- GNUのデバッガ。
- cextract *
- 関数のプロトタイプ宣言を自動生成する。
- The Cxref Homepage *
- クロスリファレンス生成器。 HTML, LaTeXで出力可能。 プログラムの設計・仕様を知るのに役立つ。 warning の情報はコードの美化に役立つ。
- GLOBAL source code tag system *
- ソースコードを読むのにたいへん役立つ。(HTML出力が素晴らしい)
- Linux Cross-Reference *
- CGIとして動作するクロスリファレンス生成器。
- LCLint *
- ANSI C 対応の lint
- GNU Autoconf *
- configureスクリプトを生成する。
- Automake Home Page *
- Makefileを生成する。Makefile.amの文法は簡単。
- GNU Libtool - GNU Project - Free Software Foundation (FSF) *
- ライブラリの作成の面倒を省く。共有ライブラリを簡単に作れる。
- gettext - GNU Project - Free Software Foundation (FSF) *
- メッセージを国際化する。
- indent - GNU Project - Free Software Foundation (FSF) *
- ソースコードの書式を整形する。
- strace homepage *
- システムコールとシグナルを追跡する。
- ltrace *
- 共有ライブラリ内の関数の呼び出しを追跡する。Linux専用?
メモリプロファイラ
- MemProf *
- GUIのメモリプロファイラ。 コンパイル時に特殊なライブラリをリンクする必要がない。 すばらしい。 ただし Linuxでしか動かない。 CUIが付属しないのが難点 (テストの自動化に使えない)。
% gcc -g -o foo foo.c # -g をつけるとファイル名と行番号がわかる % memprof ./foo
- mpatrol *
- メモリリークを検出する。 問題の mallocに至るまでの一連の関数呼び出し (スタックトレース)を出力してくれる。 ただし、プログラムによっては、とてつもなく遅くなる。
# -g をつけるとファイル名と行番号がわかる % gcc -g -o foo foo.c -lmpatrol -lbfd -liberty % MPATROL_OPTIONS="LOGALL PROF USEDEBUG" ./foo % mleak # メモリリークの表示 % mprof mpatrol.out # 詳細情報 # メモリリークのテストを自動化できる % MPATROL_OPTIONS="LOGALLOCS LOGFREES USEDEBUG" ./program % mleak | grep 'unfreed allocations: 0 '>/dev/null && echo ok ok
- ccmalloc *
- メモリリークを検出する。 問題の mallocに至るまでの一連の関数 呼び出し (スタックトレース)を出力してくれる。 gccのデバッグ情報を使っているようだ。
% cat ~/.ccmalloc log CCMALLOC-LOG # ログをファイルに保存 # -g をつけるとファイル名と行番号がわかる % gcc -g -o foo foo.c -lccmalloc -ldl % ./foo % cat CCMALLOC-LOG
- dmalloc *
- メモリリークおよび不正なアドレスへの書き込みを検出するライブ ラリ。 問題の mallocの出力には素朴に __FILE__, __LINE__ を使ったマクロを用いている。
% head -4 foo.c #ifdef DMALLOC #include <dmalloc.h> /* これが必要 */ #endif % function dmalloc eval `command dmalloc -b $*`; # sh系 % dmalloc -l log -i 100 low % gcc -g -DDMALLOC -o foo foo.c -ldmalloc % ./foo % cat log
余談: GLib の g_new, g_malloc の挙動を調べるには、対象プログ ラムを -DUSE_DMALLOC つきで make します。このマクロが定義さ れていると、g_new, g_malloc の代わりに普通の malloc が使われ ます。
どうしても ccmalloc/mpatrol で本物の g_new, g_malloc の挙動 を調べたいときは対象プログラムに libglib.a をリンクする必要 があるようです (libglib.so ではうまくいかなかった)。次のよう に実行すると libglib.so の代わりに libglib.a がリンクされま す。もっといい方法はないものかしら?
# メモリプロファイラとして ccmalloc を使う % ln -s /usr/lib/libglib.a . % gcc -L. -lglib -I/usr/lib/glib/include -g -o foo foo.c -lccmalloc -ldl # autoconf + automake化されたソフトウェアの場合: % ln -s /usr/lib/libglib.a . % ./configure && make LDFLAGS=-L. LIBS='-lccmalloc -ldl'
GTK+/GNOME関連
- GTK+ *
- Cで実装された GUIツールキット一式。 元々は GIMP のために開発された。 テーマの機構で見た目を大胆に変更できる。
- 情報源: GTK v1.2 Tutorial,
Gtk Tutorial 翻訳作業のページ,
GTK+ Reference Manual,
GDK Reference Manual,
Gtk+ハッキングレポート,
岡充氏の GTK+のページ
- GNOME *
- GLADE GTK+ User Interface Builder *
- マウスで簡単にユーザインターフェイスを設計できる。 GLADE が出力する Cソースはそのままコンパイルできる。 libglade と組み合わせれば、GUIの Cソースが不要になる。
- 情報源: dW : Linux : GNOMEnclature: 手書きによるコーディングは必要ありません
その他
- Jon Bentley: Sorting Algorithm Animations from Programming Pearls *
- ソートの過程をアニメイションで見ることができる。アルゴリズムは 6つの中から選べる。実に面白い。