18章_道具と資源




18.1_こんなのを捜している。A: 以下の名前を持つプログラムを捜すこと。
相互参照を生成するツールcflow または cxref, calls, cscope,xscope, ixfw
整形ツール/プリティプリンターcb または indent, GNU indent,vgrind
改訂履歴管理、構成管理ツールRCS または SCCS
Cソースを解読不能にするツール、(シュレッダー)obfus または shroud, opqcp
makeコマンドの依存関係を作り出すツールmakedepend, あるいはcc -Mまたはcpp -M
コードのメトリックスを求めるツールccount, Metre, lcount, またはcsize, もしくは URLhttp://www.qucis.queensu.ca:1999/Software-Engineering/Cmetrics.htmlを参照
McCabe and Associatesが販売している製品もある。
行数測定ツール大まかでよければUnixに標準で付いてくるwcで、
またgrep -c ";"を使えばずっと正確な結果が得られる。
プロトタイプ生成ツール質問11.31参照
mallocの問題を追跡するツール質問18.2参照
"選択的"プリプロセッサー質問10.18参照
他のプログラム言語からの変換ツール質問11.3120.26参照
Cプログラム検定器(lint)質問18.7参照
Cコンパイラそのもの質問18.3参照
(上のツールの一覧表は完璧を求めたものではない。上の表に載って いないツールを知っていれば、この表の管理者に連絡を取って欲しい。)

ツールの他の作者による一覧表、各ツールに関する議論はUsenetのニュー スグループcomp.compilersやcomp.software-engに投稿されている。

質問18.1618.3も参照のこと。


18.2:
malloc()の厄介な問題はどうやって追跡すればよいか。

A:

malloc()にまつわる問題の追跡を支援するデバッグ用パッケージは数 多くある。人気があるのはConor P. Cahill作の"dbmalloc"、これは comp.sources.miscに1992年に投稿された。volume 32に入っている。 その外には"leak"というのがcomp.sources.unixのvolume 27アーカイ ブから入手可能である。JMalloc.cとJMalloc.hは"Snippets"所蔵であ る。MEMDEBUGはftp.crpht.luのpub/sources/memdebugにある。
質問 18.16も参照のこと。

商品版のデバッグ用ツールも多数存在する。これらはmalloc()に関係 した問題や、その他のなかなか解けない問題を追い詰めるのに非常に 役にたつ。

Nu-Mega Technologies社のBounds-Checker for DOS,
P.O. Box 7780, Nashua, NH 03060-7780, USA, 603-889-2386.

Centerline Software社の(かってはSaberという社名だった)
CodeCenter(以前はSaber-Cという名前だった),
10 Fawcett Street, Cambridge, MA 02138-1110, USA,
617-498-3000.

ParaSoft Corporation社のInsight, 2500 E. Foothill
Blvd., Pasadena, CA 91107, USA, 818-792-9941,
insight@parasoft.com .

Pure Software社のPurify, 1309 S. Mary Ave., Sunnyvale,
CA 94087, USA, 800-224-7873, info-home@pure.com .

AIB Software社のSENTINEL, 46030 Manekin Plaza, Dulles,
VA 20166, USA, 703-430-9247, 800-296-3000,
info@aib.com .


18.3:
フリーまたは安く手に入るCコンパイラにはどのようなものがあるか。

A:

人気があって高品質なコンパイラとしてはFSFのGNU Cコンパイラすな わちgccが挙げられる。prep.ai.mit.eduのディレクトリpub/gnuもし くは幾つか存在するFSFのアーカイブサイトから入手可能である。 MS-DOSへの移植であるdjgppもある。これはSimtelやOaklandアーカイ ブ、もしくはその他多くのアーカイブサイトのたいていは pub/msdos/djgpp/とかsimtel/msdos/djgpp/というディレクトリから 入手可能である。

PCCというシェアウェアのコンパイラがある。PCC12C.ZIPという名 前で入手可能である。

Mix SoftwareのPower Cは非常に安価なMS-DOS用のコンパイラである。 連絡先は、1132 Commerce Drive, Richardson, TX 75801, USA, 214-783-6001.

最近開発されたコンパイラとしてはその他にlccがある。これは ftp.cs.princeton.eduのpub/lccからanother ftpで入手可能である。

comp.compilersに関連したアーカイブは入手可能な(多くのプログラ ム言語の)コンパイラ、インタープリター、文法等についての大量の 情報を収集している。John R Levineが管理する(FAQリストも含む) comp.compilersのアーカイブはiecc.comにある。入手可能なコンパイ ラと関連する資源の一覧でMark Hopkins, Steven Robenalt, David Muir Sharnoffが保守しているものが、ftp.idiom.comの pub/compilers-list/から入手可能である。(rtfm.mit.eduや ftp.uu.netにあるnews.answersのアーカイブのcomp.compilersのディ レクトリーも参照のこと。質問20.40参照。)

質問18.16も参照のこと。


18.4:
プログラムを打ち込んだところだけれど、このプログラムは奇妙な動 きをする。どこか変なところがあるか。

A:

まずはlintを(-a、-c、-h、-p や他のオプションをつけて)動かして みること。多くのCコンパイラは、実際にはコンパイラの仕事の半分 しかしていない。つまりソースコードの問題点の診断を、コードの生 成の邪魔にならない限りしないことになっている。

質問16.516.8を参照のこと。

References:
Ian Darwin, _Checking C Programs with lint_ .


18.5:
mallocを呼ぶたびにlintが出す「警告:ポインターの整合に問題の可 能性あり(warning:possible pointer alignment problem)」という メッセージを消す方法はあるか。

A:

問題は古いlintが、mallocが「どんな型のオブジェクトもうまく収ま るように整合した領域へのポインターを返す」ということを知らない し、教える手段もないということである。#ifdef lintのなかで malloc()の定義まがいを#defineしてこのメッセージを消すことは可 能であるが、そんなことをすれば本当に間違った使用法に対しても大 事なメッセージが出なくなってしまう。grep -vを使って勝手に無視 するほうがやさしい。


18.7:
ANSI互換のlintはどこで手に入るか。

A:

PC-LintとかFlexlintという製品が(シュレッダーにかけたようなソー スで提供される。これはたいていのシステムでコンパイル可能である)、

Gimpel Software
3207 Hogarth Lane
Collegeville, PA 19426 USA
(+1) 610 584 4261
gimpel@netaxs.com

から入手可能である。SVR4のlintはANSI互換で、UNIX Support Labs あるいは SYSTEM Vの再販業者から(他のC言語ツールと共に)購入可能 である。

もう一つのANSI互換のlintとしてはLCLintがある(上流工程の形式的 仕様の検査も可能である)。これは larch.lcs.mit.edu://pub/Larch/lclint/からanother ftp可能である。

lintがなくても、最近のコンパイラは、よくできたlintと同じくらい の多くの種類の診断をしようとする。


18.8:
ANSIの関数プロトタイプが用意されたことでlintは時代遅れになった のか。

A:

まさか。第一にプロトタイプは実際に存在して、しかも正しいときに だけ目的通りに機能する。うっかり間違ったプロトタイプは有害無益 だ。次にlintは複数のソースファイルに渡って一貫性を検査するし、 関数だけでなくデータの宣言も検査する。lintのように独立したプロ グラムになっていると、特定の実装に依存した余計な機能や余計な拡 張のついたコンパイラよりも、互換性が高く移植性の高いコーディン グの習慣を強制することにに綿密である。

ファイルをまたがった一貫性の検査をするのにlintのかわりに、どう しても関数プロトタイプを使いたいならば、ヘッダーファイルでプロ トタイプを正しく設6定していることを確かめること。質問1.710.6 を参照のこと。


18.9:
ネット上に流れているCの教科書はあるか。

A:

いくつか存在する。

Christopher Sawtellの『Cプログラマーへの覚え書き:Notes for C programmers』svr-ftp.eng.cam.ac.ukのmisc/sawtell_C.shargarbo.uwasa.fiの/pc/c-lang/c-lesson.zipから入手可能である。

Tim Loveの『C for Programmers』 svr-ftp.eng.cam.ac.ukのmiscディ レクトリから入手可。HTML版は http://club.eng.cam.ac.uk/help/tpl/languages/C/teaching_C/teaching_C.html にある。

Coronado EnterprisesのCチュートリアルはSimtelのミラーサイトの pub/msdos/c/にある。

Rick Roweの書いたチュートリアルはftp.netcom.comの pub/rowe/tutorde.zipftp.wustl.edu asの pub/MSDOS_UPLOADS/programming/c_language/ctutorde.zipから入手 可能である。

どうやらWebを使ったチュートリアルが http://www.strath.ac.uk/CC/Courses/CCourse/CCourse.htmlにある ようだ。

最後に、Unixマシンの中には、シェルのプロンプトから「learn c」 と打ち込むとチュートリアルが始まるものもある。

[声明(Disclaimer): これらのチュートリアルを吟味したわけではな い。これらの中の少なくとも一つには多数の間違いがあると聞いてい る。また、この種の情報は急速に時代遅れになる。上に挙げたアドレ スは、このFAQを読んで試すころには、無効になっているかもしれな い。

これらのチュートリアルのいくつかと、Cに関する大量の情報が、 http://www.lysator.liu.se/c/index.htmlからWEBを通してアクセス 可能である。

Vinit CarpenterがCやC++を学ぶ際に使用可能な資源の一覧を管理し ている。これはcomp.lang.cやcomp.lang.c++に投稿され、このFAQが アーカイブされているのと同じサイトにアーカイブされている(質問 20.40参照)。http://vinny.csd.mu.edu/でWebを使って閲覧可能であ る。

以下の質問18.10も参照のこと。


18.10:
C言語を学ぶのによい本は?

A:

Cに関する本は多すぎてここで名前を全部挙げることは不可能である。 全部評価することも無理である。多くの人が最初の参考書が最上のも のであったと信じている。KernighanとRitchieによる『Cプログラミ ング言語』("K&R"今は第二版)である。プログラミングの最初の教科 書としてK&Rが向いているかどうかは意見が分かれる。実際多くの人 がK&Rを使って学んだし、しっかりと身に付けた。しかしながらプロ グミング一般の基礎知識があまりない人の最初の教科書としてはちょっ と科学者の分析風であると感じる人もいる。

素晴らしい参照用マニュアルとしてはSamuel P. HarbisonとGuy L. Steeleによる『詳説C言語H&Sリファレンス H&Sリファレンス(C: A Reference Manual)』がある。これは第四版まで出ている(訳注:日本 語訳は3版に対応したものまで出ている)。

一からCを学ぶのには向いていないが、このFAQは書籍の形態で出版さ れている。参考文献を参照のこと。

Mitch WrightがCとUnixの注釈付きの文献一覧を管理している。これ はftp.rahul.net のディレクトリpub/mitch/YABLからanonymous ftp が可能である。

FAQリストの編者は、この質問のこれまでの回答を集めたものを持っ ている。希望があれば送る。上の質問18.9も参照のこと。


18.13:
標準のCライブラリーのソースはどこにあるのか。

A:

一つは(パブリックドメインではないけれど)、P.J. Plaugerの『標準 Cライブラリー(The Standard C Library)』にある(参考文献参照)。C ライブラリーの全体または一部はnetBSDやGNU(Linuxも含む)プロジェ クトの一部として書かれ容易に入手可能である。
質問18.16を参照の こと。


18.14:
式を構文解析して、式の演算結果を得るコードが欲しい。

A:

2つのパッケージが入手可能である。一つ目は「defunc」というパッ ケージ。comp.source.miscに1993年12月(V41 i32,33)に、また alt.sourcesに1994年1月にポストされ、
sunsite.unc.eduのディレク トリpub/packages/development/libraries/defunc-1.3.tar.Zから入 手可能である。もう一つは「parse」でlamont.ldgo.columbia.eduか ら入手可能である。その他の選択肢としてはS言語のインタープリター がある。これはamy.tch.harvard.eduのpub/slangからanonymous ftp で入手可能である。またシェアウェアのCmm(C-minus-minusまたはC から難しいところをマイナスしたもの)もある。質問18.16も参照のこ と。

構文解析/式の評価のコードは『Software Solutions in C』にも載っ ている(12章, pp. 235-55)。


18.15:
C言語の文法をYACCで書いたものは、どこで手に入るか。

A:

最も確かな文法は当然ANSI規格の中にある。その他にJim Roskindに よるものが
ics.uci.eduのディレクトリpub/*grammar*に置かれている。 ANSI文法に肉付けして動くようにしたものが(Jeff Leeによる) uunet(Q17.12を参照)のusenet/net.sources/ansi.c.grammar.Zに、対 応する字句解析ツールとともに置かれている。FSFのGNU Cコンパイラ は文法を含んでいる。K&Rの第2版の付録にもついている。

comp.compilersのアーカイブは文法についてもっとたくさんの情報を 保存している。質問18.3を参照のこと。

References:
K&R1 Sec. A18 pp. 214-219; K&R2 Sec. A13 pp. 234- 239; ANSI Sec. A.2; ISO Sec. B.2; H&S pp. 423-435 Appendix B.


18.15a:
Cコンパイラの妥当性を検査する一連のテストをだれか持っていない か。

A:

Plum Hall(以前はCardiff, NJ、現在はHawaii)が売っている。FSFの GNU C(gcc)の配布にはc-torture-test.tar.Zというパッケージが含ま れている。これはコンパイラのよくある問題点をチェックするもので ある。Kahanのパラノイア・テストは
research.att.comのディレクト リnetlib/paranoiaから手に入れることができる。これはCの浮動小数 点計算の実装に厳しいテストを行う。


18.16:
どこから、これらのパブリックドメインのプログラムを手に入れるこ とができるのか。

A:

入手可能なプログラムの数や、おおっぴらにアクセス可能なアーカイ ブサイトの数や、サイトにアクセスしようとする人の数が増えるにつ れ、この質問への解答はやさしくなる一方で難しくもなっている。

社会の役に立つことを目的とした大きなアーカイブサイトがたくさん ある。たとえばftp.uu.netとかarchive.umich.eduoak.oakland.edusumex-aim.stanford.eduwuarchive.wustl.eduなどである。これら のサイトには莫大な量のソフトウェアやその他の情報を保存していて、 すべて自由に入手可能である。FSFのGNUプロジェクトの中心となる配 布のサイトはprep.ai.mit.eduである。これらの有名なサイトは概し て混んでいてつながりにくい。そこで"ミラー(mirror)"サイトがたく さんあって負荷の分散に努めている。

インターネットにつながってる人には、アーカイブサイトからファイ ルを取り出す昔からの方法はanonymous ftpである。ftpが使えない人 には、メールによるftpのサービスを行っているサーバーがいくつか ある。ますますワールドワイドウエブ(WWW)が公表や索引だけでなく 大きなデータファイルの転送にまで使われるようになってきている。 きっともっと新しいアクセス方法が発表されていることだろう。

ここまでは答えやすい部分である。難しいのは詳細である。このこの 記事はプログラムを保存しているサイトのすべてや、サイトにアクセ スする方法を突き止めたり、挙げることはできない。そもそもネット にアクセスできるなら、動いているサイトや便利なアクセス方法につ いての、このFAQに載ってるのより最新の情報にアクセスすることが できる。

この質問のその他のやさしそうで本当は難しい面は当然どうやってど のサイトが探しているものを保存しているかを見つけることである。 この分野には途方もない労力がつぎ込まれていて、毎日のように新し い索引つけのサービスが現れている。こういうサービスの最初のもの の一つが「アーチー(archie)」である。ネット上で入手可能なプログ ラムや資源で名前が分かっているものなら、アーチーサーバーがどの anonymous ftpサーバーにあるかたいてい教えてくれる。アーチーの コマンドが手元のシステムに載ってるかもしれないし、なかったとし たら「help」と本文に書いてarchie@archie.cs.mcgill.caへメールを 送ればいい。

Usenetへアクセスできるのなら、comp.sources.unixや comp.sources.miscといったグループへの定期的なポストを参照する こと。そこには保存の方針や取り出しかたが記述してある。ニュース グループcomp.archivesの記事には様々な情報の、anonymous ftpによ る入手方法の紹介が含まれている。最後にcomp.souces.wantedが、た いていはソースのありかをたずねるのに最もふさわしいニュースグルー プである。その場合でもポストする前にFAQのリストである「How to find sources(どうやってソースを見つかればよいか)」をチェックす ること。

質問14.12も参照のこと。

目次へ戻る