市販ライプラリのすすめ マニュアルを重視しよう。 になってしまっては、本末転倒になってし ものである。そのためにマニュアルが冗長 ざわざ記述してあれば、どこかで役に立つ 便利だ。たとえ、知っていることでも、わ 再構築するためのやり方まで書いてあると 合は、ソースを修整した後、ライプラリを また、ソースつきのライプラリ製品の場 りうる。 は使う気がなくなってしまうことも最悪あ イプラリ利用の最初でつまづいてしまって ルで済むプログラマ過保護時代である。ラ る。コンパイラ自体がらくらくインストー プラリへの対象プログラマの範囲が広が 方などまで書いてあったほうが、そのライ 自分のプログラムでの使い方、リンクの仕 ールの仕方、ライプラリの使い方、つまり 話が前後するが、ライプラリのインスト と見通しを知るためにいい。 ラリ使用のヒントや注意点が書かれている がかりなプログラム作成時におけるライプ 記述されていると大助かり。さらに、おお でに、短いサンプルプログラムがいくつか る時間が短くなるので好都合である。つい く書かれているほうが、その関数を理解す て、関数の仕様についてはなるべくくわし マニュアルの内容で当たりまえのこととし イプラリとの一番の差かもしれないのだ。 るかどうかが、自前のライプラリと市販ラ 際のところ、マニュアルがしつかりしてい 本してあるほうが親切だと思う。まあ、実 ロッピーディスクに収録というよりは、製 ているにこしたことはない。この場合、フ やすいマニュアル ( ドキュメント ) がつい あたりまえだが、わかりやすくて、よみ まうが、一般にこういったライプラリ製品 のマニュアルはそっけないものが多く、そ の心配はないようだ。 ぜいたくを言うとキリがないが、印字品 質もよいほうがいいに決まっているし、製 本がしつかりしていたほうがいいに決まっ ている。バインダーで閉じる時も、開きや すいものにしてほしい。まったく、ユーザ ーの要望は勝手である。 商品を買うまえに、マニュアルの内容を どうやって調べるかだが、ページ数や版型 くらいなら電話で問い合わせすることはも ちろんできる。場合によっては、マニュア ルの一部をコピーや F A X して送っ : くれ るかもしれない。さらに、うまくいけばマ ニュアル自体を送ってくれることもある。 僕自身、マニュアルそのものを送って頂き、 驚いたことがある。 ソースかついているかどうか 確認しよう。 ソースがついていれば、ライプラリ内の 関数を自分なりに手を入れることも可能。 ライプラリを使っていると、単に関数名が 気に入らないという場合さえある。引数の 仕様を変更したいということもしばしばあ る。ライプラリの関数の動作をはっきりと 確認したい場合もある。こういう時には、 なにかとイライラのもとになるので、ソー スがあったほうがいい。 製品によっては、ソースを入手するため に、別料金が必要な場合もある。誰もが、 ソースをいじるわけではない ( いったい、 どのくらいの割合でソースはいじられてい るのだろうか疑問だ ) ので、ソース別売り はいいことなのかもしれないが、タダで付 属していてもじゃまにならないことも事実 だ。 また、ソースを読むということは、勉強 になる。バグへの対処のしやすさもソース があるとないとでは雲泥の差がある。他機 種への移植性についても、ソースのあるな しで大違いだ。 ソースは読みやすいか。コメントは適切 か。マニュアルの頂でも触れたが、再コン / ヾイルのための make ファイルや / ヾッチフ ァイルは付いているのか。世の中には、再 コンパイルでつまづいてしまうプログラマ もけっこういるだろう。また経験豊富なプ ログラマでも、こういうものは、ついてい た方がライプラリを作り直す時に楽に決ま っている。 ロイヤリティーはどうなっている のか確認しよう。 ライセンスとかロイヤリティーなどとい うもの。市販ライプラリを使用してプログ ラムを作って販売する場合、 1 本につきい くらのロイヤリティーをライプラリ開発元 に支払うというものである。場合によって は、商品としてのプログラムを作る場合用 に特別にロイヤリティー料金込で、かなり の高額になっている製品もある。商品とし て売らないプログラム用には、ロイヤリテ ィー分が安くなったライプラリ製品が用意 されている。 以上ですが、ぜひ、市販ライプラリの良 い点を知っていただいて、開発効率をあげ ていただければと思います と、いうことで、簡単ではありますが、 市販ライプラリのすすめをおわらせていた だきます。
List 1 gobikatu. lis List 按 178 : あん 179 : 180 : 181 : あん 182 : kl : 闇 183 : 184 : くら ; くら 185 : 案 186 : あん 187 : 188 : 189 : やみ / / ' あん ' という音読みを無視 190 : 191 : 192 : あん 193 : 194 : くら : くら 195 : 196 : 197 : きよう 198 : 199 : : 子 " あんず " 200 : のソート以外に , ③ , ④ , の中にないからて、す。「鮎」という文字につ 次の行て、ある 2 行目に書かれている読みが , ・・とさまざま すべてに通用する読みて、す ( たとえば「鮎」に な処理ニーズがどんどん出てくるて、しよう。 いても , 音読みは捨てています。 対してのくあゆ > ) 。 使う言語の違い・・・・・・たとえば C てはなく Pro 「姐」という文字の右には , > クという妙 大きな問題が三つほどあります。第一に 1 。 g ・・・・・・て、は , また必要とする辞書の構造が な記号を付けています。これは , 一般の日 辞書というものは作るのに相当の労力時間 違うかもしれない 本語の枠を外れた特殊な読みがあるから , て、も私は , 言語に関しては , < あらかじめ がかかることて、す。私の場合 , ひまなとき reigai. goi (List 3 ) というファイルを参照せ に少しずっ作っていくのて、すから , 全部完 の理論 > というものを , あまり信用しない よという指示て、す。て、そのファイルを覗く 成するまてに数か月はかかるて、しよう。 というか , あまり真剣に考えたくないほう と , 「姐」に関しては , 、、小姐〃という熟語て、 れを , A さんは「あ」 , B さんは「い」というよ なんて、す。一種の , 再帰的な規則性やステ は < しやおちえ > という読み , 、、大姐′′とい , 担当を決めて各人が部分的に作れば , ート遷移図などて、もってあらかじめ定義て、 う熟語て、は < た一ちえ > という読みだと書 かなり短時間て、てきるて、しよう。 きる言語は , プログラミング言語を初めと かれています。 第二の問題点というか課題は「語彙の取り 本稿の冒頭部分と関連しますが , 中国語 して , 一部の人工的な言語だけて、すからね c ( たとえば人名や地名 ) を日本語読みする風 出し」て、す。この処理のためには , 現在の日 人間の現実の言語は , もっともっと面倒事 本語かな漢字変換用 FEP が使っているもの に満ち満ちています。 習も , そろそろ全廃したほうがよいと私は に似た辞書が , 別途必要になるて、しよう。 て , とにかく , この私にかぎらず , いろ 思います。「とうしようへい」て、はなく「て、ん これを作るのも , えらい苦労てっせ ( 既存の んな人がいろんなもんを , ad hoc に作って しゃおびん」 , 「べきん」て、はなく「ぺいじん」 いく , それらをオープンに提案していく , FEP の辞書の利用法を考えるという手もあ 等々にしていただきたい。中国語の日本語 議論もしあっていく , ということの蓄積の りうるが ) 。ただし , 書籍等の索引づくりの 読みは , かっての忌まわしき侵略時代の名 中から , 少しずつ , 理論的整理みたいなも ための語彙取り出しには , それを効果的に 残て、あり , 日本人の国際性の涵養のために んも , 可能になってくるのやないか。そう 行なうためには , 幾つかの特殊な制約があ も , 百害あって一利なして、あります。 思います。いきなり最初から , 理論的に整 ります。最近見た本の中て、は , 英語のテキ みんなでワイワイやってるうちに ストに関して , fComputers and Writing : 然とした , 充実したもんは , 誰がやっても 何とかなるやろ て、きんと思いますね。 State of the Art 』 (eds. P. 0. H01t, et al, Kluwer Academic, 1992 ) の中て , その戦 この方式と , C の locale/LC COLLATE と こういう辞書の存在を前提として , て、は 略の幾つかが議論されています。 の関係てすが , 要はロカールのカテゴリの 日本語の語彙のソートルーチンは , どんな 値に応じて , strxfrm( ) や strcoll( ) が , 第三の問題点は , 日本語処理のための辞 処理構造になるか。それはもう , どなたに 書というデータ構造を , こんなふうにホイ ういう辞書参照部分へ分岐するようになっ も想像っくと思います。要は特殊状況から ホイと ad hoc に作っていってしまってよい ておればよいのどす。その実装の具体的な 先にチェックしていくことが , 基本てすね。 ものか。今後 , ①語彙の取り出しや②語彙 やり方は , また後日考えましよう。 なにひとっ特殊状況のない文字は , 文字の よ 、 ' ろかっそ なれきわせせ たるけえすす れりノ、うしし るらいいささ 1 ーワ朝ー 1 1 人ー 1 ワ朝 ーーワ 0 00 -4 ・ (C) CD List 「 elgal. gOl え おち 姐や姐一 姐小し大た C 言語フォーラム 109
ea e s , Roonm のつもりで送ったのですが , 企業 ージャックをみると , モデムのと ムコードの質の善し悪しは , プロ ☆ C を独学 にとっては「小さな親切 , 大きな 違っている。なんと , 新親子用の グラマの実力次第ということなの お世話」なのでしようか ? それ 会社に入社した頃 , 導入教育で C を ジャックだったのだ。しかも , 増 て、すね。 だったら「もうニ度と送ってくれ 築時に工事をしたので , 屋内と外 少し学びましたが , 配属されたセ ☆ C の達人 るな」と思いつつも連絡を待っ今 部との接続は屋根裏・・・・・・。かくし クションが COBOL 主体の課でした 日この頃です。 会社で席が向かいの後輩は C の達 て , モデムは , 接続されないまま ので , C 言語はきれいに忘れてしま サラリーマンプログラマ ( NIFTY ー S 本棚に放置されている。屋根裏に 人 ( 少なくとも私はそう思う ) です。 いました。 それから 4 年たった今 , 結婚して erve) その影響で Turbo C 十十を勉強し 上り , どう接続されているのか確 主婦になり , どうにか空いた時間 自分宛のダイレクトメールな ています。 C マガジンも彼が熱心に かめ , ケープルを引き回したり , に C を独学しようと C マガジンを読 ら , さらっとながめて気にい 読んでいたので買い始めました。 ( 直結だったりしたら ) NTT へ電話 んでいます。 らなければすぐに捨ててしまいま 仕事は電子楽器の設計で , 後輩は , して工事をしてもらうのはいつの すが , 誤って配達されたものだと , ウインドウ型シンセのプログラミ 日なのだろうか ? パソコン通信 天野文代 ( 千葉県 ) ダイレクトメールといってもその ングをしています。近くに何でも への道は , 遠く険しそうだ・・ ☆ダイレクトメール まま捨てるわけにはいきませんよ 聞いたことに答えてくれる人がい 枝松樹 ( 愛媛県 ) ることは , プログラミングの修業 ね。て、も , 送り返したのになにも 先日某社からダイレクトメールを 新親子電話のモジュラージャ 返事がこないというのはちょっと にはとてもよいことだとつくづく ックは , モデムのジャックと 受け取ったのですが私が帰宅する 若林浩 ( 東京都 ) ひどいて、すね。 思います。 合わなかったんて、すか ! ? 電話工事 前に私の嫁さんが間違えて封を切 経費から考えて , 送り返されたダ をするときも後々のことをよく検 ってしまったのです。ところがそ いわゆる , オンラインマニュ イレクトメールを正しい宛先に再 討しておかなくてはいけないのて、 のダイレクトメールをよくよく見 アルより強力な、、歩くマニュ るとなんとこの四国の田舎町に東 発送しないかもしれませんが , すね。私も自分用の回線を引くと アル〃というわけて、すね。新しい 言ぐらい連絡を入れてほしいもの きには , 気をつけたいと思います。 京都の男性宛のダイレクトメール アプリケーションソフトを使うと て、すよね。 が一緒に重なっているではありま きて、も , すて、に使い方をマスター ☆プロのコード して教えてくれる人が側にいると , せんか。 ☆家庭と AT ' 93 年 3 月号の Readers' Room の、、詐 使用目的に合わせて教えてくれる 私宛のダイレクトメールの封印を 早く AT カ歡しい。 7 月中には発注で 行った際の糊が , その男性宛のダ 欺 ? ″について。確かに , ソフト のて、 , すぐにそのソフトを使い きると思うけど , それまでカミさ ハウスの中で , 作成されるソフト なせるようになりますよね。 C 言語 イレクトメールにしつかりとくっ んの気持ちが変わらないことを祈 の中には , 汚いコーディングのも て、も独学て、学ぶより早くプログラ ついていたのです。「捨てようか」 る今日この頃・・・・。それにしても , ミングスタイルをマスターて、きそ のもあります。これは時間 ( 納期 ) とも思ったのですが , 封を切った 何か買おうとするたびに , 申請し の制約もあるでしようが。プログ うて、すね。 ことの詫び状とそのダイレクトメ なければいけなくなってしまった 若林さんは , これまて、アセンプラ ラマ個人の、、カなの問題だと思い ールを添えて送り主の某社に送り 自分がナサケナイ。でも , 家庭の をされていたそうなのて、 , その後 ます。上級プログラマは , 短期間 返しました。しかし何日たって 輩さんと組むと最強の C プログラマ 平和 ( そして , 世界の平和 ) のため にエレガントなコードを普通のプ も届いたのかどうかの連絡もなし に私はガンバルのであった。子供 コンビになるのて、はないてしよう ログラマの数倍は書きますよ。 では , 封を切ってしまった私の罪 たちょ , 早く大きくなりなさい。 か。今後のご活躍を期待していま 須田浩章 ( 埼玉県 ) は消えません。 そして , 父さんを開放してくれ す。 ましてや本当に私が悪いのかどう 、時間の制約もコーディングに 柴田和広 ( 愛知県 ) かとても悩んでいます。私はダイ 大きく関係してくるかと思っ ☆コンバイラか欲しい レクトメール自体否定しない考え たのて、すが , そうて、はないのて、す ☆モジュラージャック でいましたが・・・ 最近 , C マガジンや Dr. Dobb's ジャ 。ようは送るほ ね。失礼しました。 モデムを買ってきた。「さあ , 今夜 うも送られるほうも気持ちよくし ーナルに感化されて , 自分でプロ 結局 , 当然といえば当然て、すが , から通信だ」と思って家のモジュラ たいのですが・・・ こちらは親切 プロて、もアマチュアて、もプログラ グラムをすることを再び始めまし 156 C MAGAZINE 1993 5
C 言語プログラミングレッスン 「ちょ , ちょっと待ってよ。頭がゴチャゴ て、した。これは , 3 * 4 の計算結果 " 12 " を 整数と整数の加減乗除を考えてみましょ ・司そういうあなたのために 表示する部分て、す。「 * 」の記号の読み方は チャしてきた・ う。加減乗除の四つの計算のうち , 加・減・ もう少し説明を付け加えましよう。 「アスタリスク」て、すが , 3 * 4 は普通「さん 乗については話は簡単て、す。なぜなら , これまて、 , 関数 printf は単に文字列を表示 かけるよん」と読みます。さて問題は割り 整数十整数 = 整数 するためだけに使ってきました。て、 , 今月 算て、す。 整数ー整数 = 整数 は文字列て、はなく , 計算結果 ( 数値 ) を表示 printf()7 / 3 = %d*n", 7 / 3 ) ; 整数 x 整数 = 整数 するために関数 printf を使おうというのて、 割り算の記号は「 + 」て、はなく「 / 」て、す。これ だからて、す。この点て、 , 数学と C 言語に差は す。 C 言語て、は「文字列」と「数値」 ( 正確には は 7 / 3 の計算結果 " 2.333 ・・・ " を表示する ありません ( 正確にはオーパフローの問題が 整数値 ) は別のものとして扱われます。 部分て、すね・・・ あるのて、微妙に違うこともあります ) 。問題 printf("Hello. *n") ; あれれ。 Fig. 1 を見てください。計算結果 は加減乗除の除 , つまり割り算て、す。 と書けば , 画面に "HeIIo." と表示されます は 2.333 ・・・とならずに単に 2 となっています。 整数 + 整数 これはどうしたことて、しよう。計算を間違 の結果は常に整数になるとは限らないから printf(3 十 2 ) ; ( 誤り ) えないはずのコンヒ。ュータが間違いをおか て、す。 C 言語の整数演算て、は , 割り切れなか と書いても , 画面に 5 とは表示されません。 したのて、しようか。 った小数部分は切り捨てられて , 整数にし 関数 printf を使って計算結果を表示するには てしまいます。この点に注意してください 整数について List 1 のような工夫が必要なのて、す。それが 複雑な数式と優先度 文字列中の " % d" という特別な文字列て、 Fig. 1 を見ると , 7 / 3 すなわち「 7 + 3 」の結 す。 printf(3 十 2 ) ; と書く代わりに 果が 2.333 ・・・て、はなく , 単に 2 になっている さて , 3 十 2 とか 3 x 4 とかいった単純な計 printf("%d*n", 3 十 2 ) ; ことがわかります。これはなぜて、しようか。 算以外ももちろん行うことがて、きます。た 実はこれはコンヒ。ュータがここて、覈絵 と書けば , 3 十 2 の計算結果て、ある 5 が表示 とえば , 次の計算をしてみましよう。 を行っているからて、す。 されるのて、す。ここて、説明した % d は関数 p 123 十 45X67 ー 8 十 2 rintf の約束事て、す。残念ながら , 「オレはそ ふだん私たちは数を整数や小数に区別し これを C 言語て、表記するとどうなるて、しよう んな約束はめんどうだからイヤだね」という て扱ったりしません。 か。先ほどの約束に従って記号を書き直すと , ことはて、きません。関数 printf を使うなら けれど C 言語て、は , コンヒ。ュータ上の処理 ー 8 / 2 123 十 45 * 67 の都合から , 数をいくっかの地と呼ばれる ば , 「 % d を使って整数を表示する」という約 となりますね。 束事を覚えなくてはなりません。よろしい グループに分けて扱います。整数 , 長い整 ところて、・・・・・・この結果は何になると思い て、すか。 数 , 符号なし整数 , 浮動小数・・・・・・などの型 ますか ? List 2 のプログラムをコンパイル があります。 して , 実行した結果は Fig. 2 のとおり。 3134 掛け算・割り算 このレッスンて、はしばらくは整数だけを が答えて、す。どうて、すか。あなたの予想と さて , List 1 の説明を続けます。足し算の 合っていましたか。この , 取り扱っていくことになります。 次は引き算て、す。 ちょっとここて、整数について簡単に解説 123 十 45 * 67 printf("5 8 = %d*n", 5 してみます。数学て、習ったことを思い出し の計算を行う場合 , 数学同様に十やーより これは , 5 ー 8 の計算結果“ー 3 " を表示する てください。整数とは数の一種て、 , も * や / のほうを先に行うことになっていま 部分て、すね。これは問題なし , と。その次 す。て、すからこの例て、いうと , ー 1 , 0 , 1 , 2 , 3 , は掛け算て、す。 という数のことて、す。 372 やー 583 は整数て、 123 十 45 printf()3 * 4 = %d*n", 3 * 4 ) ; すが , 1.5 だとかー 3.2 だとか , 円周率なだと よりも そうそう , 掛け算の記号は「 x 」て、はなく「 * 」 かは整数て、はありません。 複合した演算 ー 8 / 2 45 * 67 % d の使い方 List List 1 : #include く stdio. h> 2 : 3 : main() 5 : 1 : #include く stdio. h> 3 : main() printf( ” Xd*n ” , 123 + 45 * 67 ー 8 / 2 ) ; 5 : printf( ” Xd + Xd = % d ” , 3 , 2 , 3 + 2 ) ; C 言語入門講座 85
に一売 Fig. 3 色合わせ男子 Fig. 2 グラフィックエテタ画面 また , すて、に作って使っている方がいた を入れてみました。しかし , チェックには うにし , 組み込み型のマウスドライバを作 引っかからず , なお , 除算 0 ェラーがて、てし なら比べてみてください りました。 さて , 「 PDSICONS 」は作者が PDS 扱いと まいます。 ソースを見てもらえばわかるように , Tu しているものて、す。そこて、 , 「 SGE 」のソー もうひとつのバグは , マウスカーソルの rbo PascaI も Ver. 6.0 からはアセンプラて、 表示に効率を考えて , 書き込みや背景の取 ス中て、 , それを参考に作ったマウスドライ 直接書き込んて、プログラミングて、きるよう り込みをワード単位 (MOVSW, LODSW, バのみ「 PDSICONS 」と同じ扱いとするため になりました。最初は , Ver. 5.5 て、もコン STOSW など ) て、行っていましたが , ときど に PDS 扱いとします。 パイルて、きることを考えていたのて、 TASM きハングアップすることがありました。 て、 OBJ ファイルを作り組み込んて、いたのて、 苦労したことなど これもなかなか原因がわからず苦労しま すが , こうすると , アセンプルする必要があ るのて、 , MAKE ファイルも必要になりま 上記のふたつは 8086 系て、アセンプラを使 とくに難しいことや , Ver. 5.5 からのオ す。コンパイルが簡単て、 , めんどうくさく っている方なら一度くらいは出会っている プジェクト指向プログラミングなどはして ない Turbo PascaI としては , 結構煩雑にな かもしれません。たずねる人がいないとか いないのて、 , Turbo PascaI て、のプログラミ るし , アセンプラが必要なところには直接 なり苦労したのて、はないて、しようか。 ングて、は , 苦労といえるほどのことはあり アセンプラて、書いたほうがわかりやすくな 結局 , Turbo AssembIer のユーザーズガ ませんて、した。 ると考えました。それて、 , Ver. 6.0 だけに イドを読みなおして , やっと原因がわかり ただ , マウスドライバのアセンプラ部分 対応することにしました。 ました。 て、は , 8086 系の CPU の曖昧さのために , わ ソースを見てもらえばわかりますが , 以 まず , 0 除算工ラーは 0 除算のとき以外て、 けのわからないバグに悩まされました。運 前は別ファイルだった , マウスドライバユ も , 結果が答えを収納するレジスタのビッ のいい人は一生会わずに済むて、しようが , ニットと ATOK7 のコントロール部分を Tu ト幅をオーパフローしたなら起こるのだそ 知らないといざ出会ったときに苦労すると rbo PascaI のソースとしてアセンプラて、直 うて、す。 思います。 接書き込んて、います。 それて、 , 知ってる人はなんだと思うようなことて、 SGE の各ソースを見てから使ってもらえ cwd ( * DX : AX 32 ビットに拡張 * ) すが , 次に述べてみます。 ば , このドライバが Turbo Pascal のプログ idiv[MickeyX] ( * 答えは 16 ビット * ) たとえばマウスの移動量を求めるときに ラミングに組み込んて、簡単に使えることが idiv [MickeyX] とすることて、 0 除算ェラーがて、なくなりまし わかると思います。いままて、 , Turbo Pas た。 0 て、割っていないのに 0 除算工ラーとな のようにマウスから読み取ったデータをミ cal て、マウス利用のプログラミングを作ると 除算 るのはいまだに納得がいきません。 ッキーて、割るわけて、すが , ときどき , きに , しかたなく MS-DOS のマウスドライ ハングアップの原因はセグメント こて、 バを使っていた人や組み込み型のマウスド 0 のエラーて、止まってしまいました。 終端を越えてワード単位て、アクセスしたた は , 絶対に 0 にはならないようになっている ライバがほしかった方は , 利用してみてく めに起こるようて、す。 1 バイト目が FFFFh のて、すが , 確認のためにチェックルーチン Conference Room 137
がかかってくるのだ。話を聞いてみると , 本当に文字どおり , 「く」「リ」「タ」「一」「ン」 「 > 」と入力しているのて、ある。この場合は , < リターン > というのが , キーという特定 のひとつのキーを押すことを意味するのだ , という基礎知識がないのて、ある。 自分の失敗談もあって , まだ若いころ , 何かのマニュアルに * * * * く filename > list のように書いてあったのて、 , filename のと ころがく > て、囲ってあるのは省略してもい いという意味なのかな , とか勝手に思い込 んて、いて , * * * * list と入力して動かないと悩んて、いたのだが , もちろんこれはリダイレクトを表す不等号 に決まっている。 例の発言に戻れば , キーワードの例を 小犬のワルツ と書いたら , 「それは間違いて、す。先頭に空 白を入れてはいけません」という結果になる かと思ったのて、 , 何と書くかを明確にする ために、、「〃、、」〃の中身がキーワードだという 意味て、使ったのて、ある。ところが回答者は , 私が、、「〃、、」〃っきて、キーワードを書こうとし ている , と考えたのて、ある。このギャップ はいったい何なのだろうか。そう , これは 新しい電子会議学の , ・ある意見に対して , 無数の正しい解釈が 存在する のひとつの実例なのて、ある。確かに , キー ワードは「小犬のワルツ」て、いいて、すか , と 聞いたらにう書いたらなんとなく違うよう な気もするが ) , これが、、「ク、、」〃を含んて、い るのかどうか論拠をもって実証することは ちと難しい getchar()) ! = EOF) { ・・ 、、 ? : ″のカッコ a b c ? d Fig. 2 優先順位により必要なカッコ while ((c if ((fp = fopen(filename, mode)) テクニカルライティングを職業とする人 なら , このような解釈をする人も想定した 記述方法など初歩の初歩なのかもしれない が , まだ私は修行が足りないようて、ある。 ッコを書くとき C 言語て、はカッコはわりと自由に書ける。 1 という式は ( 1 ) と書いてもかまわない。 K& R の初版て、は , return に続く式に ( ) がついて いて , 謎の議論を呼んて、いたのだが , なぜ これがついていたのか歴史的専門家の意見 を伺うと結構おもしろいみたいだ。カッコ をつける人のほとんどが , カッコがあった ほうが見やすいと主張するようだ。しかし , なぜカッコがあったほうが見やすいのか , その理由を説明て、きる人は少ない という か , 私は見たことがない。私はここにはカ ッコはつけない。なぜなら , そのほうが見 やすいからて、ある。なぜ見やすいかという と , 余計なものが不必要なところに書いて あると気が散るからて、ある。ムダなカッコ に効果があるのは , それが式の意味を明確 にする場合て、ある。 1 を (I) と書いても別に 何かわかりやすくなるものて、もない 基本的にカッコがなくてもいいところに は書かなくてもよい。しかし冗長て、あるが 書いたほうがいいカッコの例として , 3 項演 算子の、、 ? 〃における条件判断部分にカッコ を使うということは K & R て、推奨されている (Fig. 1 ) 。 しかし私の経験て、は , 実際にカッコを書 く必要があるから書く , という場合のほう が多い。とくに優先順位の都合て、カッコが 必要な場合には省略て、きない 典型的なのは Fig. 2 のふたつの例て、ある。 これらは「代入演算子は優先順位がとても低 い」と漠然と理解していれば忘れずに済むカ ッコて、ある。 あるいは C 言語を使い始めた頃は , 「演算 子の優先順位に自信がないためにとりあえ ずカッコを書いておく」という場合が圧倒 的に多いのて、ある。そして , これは重要な ことだが , 自信がないのはとりあえず書い ておくのが正解なのてある。 C 言語のコンパ イラが「ここはカッコがいらないのて、間違い」 ということは滅多にない ( フィンローダ NlFTY-Serve FPROG SYSOP) フィンロ ーダのあつばれご意見番 145
耳むずかしながらドジりました 第の回 日本語ソートのための 辞書を考える 岩谷宏 るところて、 , export を工クスポートという いろんな雑誌などて、 , 批判精神のヒの字も ロケールとは俺のことかと 片仮名語て、書いたら , 「東大の石田先生をは ないようなつまらんライターどもが , この ロカール言い じめ , エキスポートと書かれるようなのて、 「ロケール」を平気て、使いはじめた。このま 『アメリカ 200 のキーワード』 ( 秋間浩著 , ・司という理由て、 , 無理やりエクスポート ま行くと , 日本のコンヒ。ュータテクノロジ 朝日新聞社 , 朝日選書 431 ) という本は , な をエキスポートに改竄された。ばっきやろ は , ロケールて、コケールだわい ( とっくの昔 かなか良いて、すぞ。アメリカおよびアメリ 訳語は翻訳者のイノチやどー , タマシ からコケている , という説もあるが・・・ カ英語について勉強になるというだけて、は イやどーと怒るつもりはない。本誌 ' 93 年 3 月 たとえば , 通産省がウン億円を投じて , なく , 私が感心したのは , 英語の片仮名表 号の駄文にも書いたけど , うら若き編集者 グラフィックスの基本ソフトウェアの開発 記を英語の発音になるべく近いように書い が「東大の x x 先生が・・・・・・」なんて権威主義 をやるというて、しよう。日本はいつも , てあることて、す。たとえば , coffee はカッフ 的な言い方を話の冒頭にもってくるような のパターンやて、。ソフト時代 ~ 情報化時代 国は , 確実にコテンパンに減びるわ。 , cake はケイク , oven はアヴン , tabl における人間能力の活性化 , ひいては国力 e はティポーて、す。私はかねてから , 日本語 export をそのまま片仮名語にするなら , の向上の基本が分かってない どっかにウ の中て、使う片仮名英語を元の英語の発音か 工クスポートか , またはイクスポートだよ ン億円も余っとんのやったら , それは個人 らかなり違ったものにすることには , 百害 ね。どこをどうつついても , エキスポート に還元しなさい。企業よ , うんと儲かった という善は出てきまん。なのに無理やり , あって一利なしと思っています。一利ぐら のなら , その金て、ハリウッドの映画会社だ こういう妙な片仮名語を鍾する , 正当な いはあると主張されるかたは , その一利は のゴッホの絵だのマンハッタンのビルだの , 何て、あるか教えていただきたい 理由というやつも , 私には思い当たりまへ 世界の田舎もん丸出して、買いあさるんやの ただし , たとえば秋間流て、書くと , 10Ca1 うて , 金は社員個人に還元しなさい。それ んな。 はロウコーになりますけど , て、も「ローカル」 が唯一 , 未来の企業力を高めるための金の そういう , なんだかわけの分からん , 頑 という書き方が , 幸か不幸か ( いや , 、、不幸 迷固陋な阿呆に凝り固まった日本の官界・ 使い方て、っせ。と言うても , もう遅いわけ 学界が , また妙な片仮名語を捏造しました にも〃と言うべき ) , 日本語としてかなり普 やけど・・ 最近 , 某週刊誌の上て、 , アメリカの若手 及浸透してしまっています。そういう , も ぜ。 locale に対するロケールて、す。どこをど うつついたら , ロケールなんてが出てく うかなり日本語として定着してしまった表 工コノミストが , 日本人の生活水準はこ るのか。ロケールなんちゅう異様なの片 10 余年 , まったく向上していないと指摘し 己については , 当面は認めなしゃーないの ゃないか。ただし , 世の出版人編集人のみ 仮名語を使いつづけることは , 今後の国際 ていました。誰しも , 実感を伴ってこの説 なさんは , ロウコーという新しい書き方も , 社会の技術者にとって , 百害あって一利な には「そうだ ! 」と賛成するて、しよう。 して、あります。 認めて通していただきたい そらそうや , われわれの血と汗の結品は , 一般に日本の世の中には大手老舗出版 私は , 最初は , この件に関して , 例によ ハリウッドのポンコツ活動写真屋を買うほ ヾ丐鹿な編集者クというた 社等も含めて ってまたまたくだらない話だと思ってあま うへ行ってもうたんやから。そういう , い ぐいの人種が多いてすぞ。 り真剣に考えなかったんてすけど , その後 こないだも , あ わゆるバブルと総称される金の使い方によ 1 三ロ C 言語フォーラム 105
題が始まる。そのアドバイスが , 単独の商 取り引き , あるいは , すべての顧客に対す るライセンス契約の条件に関連することも あるだろう。こうした場合の契約条件とし ては , 顧客の要求を満たす魅力的なものが 望ましい。しかしそれだけて、はなく , あな たがビジネスを継続していけるように十分 に安全なものて、なければいけない。これら を両立て、きる範囲は , かなり狭いはずだ。 この範囲をある方向に外れると , あなた 自身の利益を保護てきなくなる。つまり , あなたの知的所有物の所有権を失うことも あれば , 巨大て、しかも無限に拡大する責任 を負わなくてはならないこともあるだろう。 その結果 , 収入が減ったり出費が増えたり するが , いずれにしても利益がなくなれば 倒産しかない またこの範囲を逆の方向に外れた場合 , 競争力を失うことになる。つまり , ライセ ンス契約の条件があまりにも一方的てある とか , 制限がきっすぎると顧客が感じる場 合もあるし , コンペテイタがより緩い制限 を顧客に提示してくる場合もあるだろう。 こうした場合 , あなたが野心のある亀て、あ ろうとやる気のない兎て、あろうと , 競争に 守的な弁護士 は負けてしまう。 コッてもある。いくらビジネスをうまくや しかし , 軽快さはビジネスをうまくやる クが多すぎる。 さと迅速に動きまわることだけだと , リス んどいない。だから , あなたの防御が軽快 のやりかたて、長時間熟考する弁護士はほと 犬まて、用意するように教育されている。兎 の回りに掘をめぐらし , おまけに数匹の番 だから。非常に厳密な専門用語を用い , そ うするようにトレーニングを受けているの 保護された亀を援助するほうだ。彼らはそ 弁護士にとって安心なのは , 厚い甲羅て、 ろうとしても , そのチャンスやリソースに はかぎりがある。だからビジネスの面て、は 迅速に動き , 投資に対して十分な見返りを 得ることが重要だ。それがてきなければ , 少ないリソースて、もっと多くのことがて、き る誰かにいずれは負けてしまう。 ビジネスに関するアドバイスを求めて私 がこれまてに会った弁護士のうち , 最悪な のは正体不明のお化けを信じていた弁護士 だ。ある方法が賢明かどうかを彼に尋ねる と , 思いっくかぎりの危険を奇怪なものま て、なんて、も拾い上げた。ほとんど起こり得 ない危険に対しても保護を講じることに喜 びを感じていた。 もちろん , こうした保護 は顧客 ( つまり , 私 ) のお金て、行われた。そ して , 彼は IBM と法務省の双方が今にも私 を告訴するかのような雰囲気を常に釀し出 していた。 同じように私がこれまて、に会った弁護士 のうち最良の弁護士は , 法律とビジネスの 違いを明確に理解していた。彼はもっとも 可能性の高いリスクと , あらかじめ考えて おかなければいけない最悪の場合を教えて くれた。しかも , 法律的な保護のための費 用を節約て、きる部分よりも , そうした費用 が非常に高額になる部分を指摘してくれた。 そして , IBM が自分自身の保護のために開 発した方法の採用もすすめた。 当然ながら , 多くの弁護士はこの中間に こて知っておいてほしいのは , 位置する。 法律に関する典型的なアドバイスの誤りが 見られるのは保守側だということだ。次の 原理がその理由を説明している。 原理 : 弁護士は勝利することはない。企 業の顧問弁護士がちょっとしたリスクをお かすようにすすめたとしよう。その結果すべ てがうまくいったとしたら , ビジネスタイ プの人はそのアドバイスを採用した自分自 身を称賛するだろう。しかし , 会社が何ら かの損失を被ったら , 誰が非難されるかは 容易に想像てきるだろう。 p 第第盤衂聞第 だから弁護士としては , 保護のためには 保守的な立場をとるほうが簡単なのだ。こ れは賢明な方法て、あり , 賢明な方法を唱え るのが弁護士の仕事だ。顧客が厳しい契約 条件に尻ごみしたとしても , 法務部門を非 難てきない。顧客の要求は尽きることがな というのは誰もが知っていることだ。 い そして , 誰かが会社のために最善の利益を 追求しなければならないのだ。 しかし , マーケティング部門はそうは思 わない。工ンジニアが直接的には関係のな いパフォーマンスの制限についてムダ口を たたくのを止めて , 弁護士が顧客を侮辱す る ( 疑う ) のを止めさえすれば , 何ても売れ ると彼は確信 = している。次の重役会て、受 けがよいのは , これらふたつの意見のどち らなのか想像がっくだろう。弁護士の説得 力は , 実際の利益をもたらす人のものより も劣るだろう。 以上のふたつの原理を組み合わせて導か れることは , あなたがドライバー席 , つま り主導的な立場に戻ることて、ある。あなた が現在相談している弁護士からビジネスに 関するアドバイスを受けるのはやめなさい 弁護士は多くの場合ビジネス的な考えはし はっきりいえば , 普通のビジネス原理に 基づいてアドバイスてきる弁護士はめった にいない。弁護士がて、きるのは法律的なア ドバイスだけてあるという事実を , きちん と受け止めなくてはならない。その上て , そのアドバイスを理解し , それに基づいて どう行動するかは , あなたの責任だ。 弁護士が法律上のリスクを教えてくれな かった場合は文句をいってよい。ても , そ のアドバイスに基づかない行動の結果につ いては文句はいえない。 また , あなたがあまりにも保守的だった ためにビジネスをだいなしにしてしまった としても , 文句はいえない。弁護士を使う ことが有益な場合にだけ弁護士を使えばよ Programmi ng on Pu rpose 21
New York のダウンタウン再開発に必要な エネルギーにも匹敵するだろう。 アメリカ人が弁護士に金と時間を使いす ぎるのは , 誰もが知っていることだ。だか らといって , 弁護士だけを責めてもだめだ。 一部の弁護士が何て、もむやみに裁判へ持ち 込もうとするのは確かだし , 弁護士全員の 興味カ”あなたとその相手を戦わせる〃こと てあるのも確かて、ある。ても , 。それも需要 があればこそて、 , いったん需要がなくなっ てしまえばそうはてきない 私にいわせれば , 麻薬 ( drug ) を買う人が 多いのを売人のせいにするのに似ている。 たとえば , 漂白剤だって体によくないもの だが , 学校のすぐそばて、漂白剤のビンを売 っている者などいない。汗だらけのソック スを漂白するため以外には , 誰もこんな物 を欲しがらないからだ。問題なのは , 残念 なことに , 頭をわざわざだめにしたい連中 が学校の内外に多いことだ。こうした連中 からの需要が減れば , あちこちの売人も仕 事を変えざるを得ないだろう ( といっても , やはり違法な仕事だろうが ) 。 アメリカ人の訴訟好きは麻薬習慣などよ りも一世紀以上も前からのことだ。 Massa chusetts 州南部の Sturbridge Village を訪れ たときに , その興味深い片鱗を見ることが て、きた。 Sturbridge は 1800 年代初期の New England 地方の一般的な町を再現したもの だ。初期の米国 ( U. S. A. ) には非常に多く の弁護士と判事がいたらしい。つまるとこ ろ , この国は法律により立国しており , 社 会的な対立を公平に調停するのが法律て、あ ったよラだ。そのため , 口論があればなん て、もかんて、も弁護士や地方判事へと持ち込 法とビジネスの実践 んだ。 こうした状況が今て、も当たり前だと思い とて、は法律の実践面に根本的な相違がある。 当時は何事も単純て、あり , 告訴する人が自 分自身て、訴訟を起こし , 判決を受け , それ に従っていた。そしてこの流れもスムース て滞ることはまれだった。しかも , 控訴は さらにまれだった。判事の収賄さえ無視す れば , 当時のシステムは , 原則的には , 意 図したとおりに機能していたといえるだろ う。 現在のシステムはすっかり歪められてし まった。訴訟の流れの滞り ( 裁判の長期化 ) , 裁判所からの禁止命令 , あるいは裁判に至 る前の策略により , 金持ちがそうて、ない人 を萎縮させている。裁判に対するこうした 脅威に長期間さらされると , 法的に正当な 側にいる人て、も疲れはててしまラ。そして , 裁判そのものは策略と不透明さを実践する 場となっている。裁判がスヒ。ード競争やカ による戦いになることなどーめったになく , その代わり , ー偶然と ( 長期化による ) 時間に 支配されてしまう。しかも , この偶然と時 間はビジネス的な投資にはなりにくい。 聖書とシェークスピアの表現を借りると , 「成すべきときに成すなら早急に行うがよ い」となるだろう。しかし , 法的な手続き が迅速に行われることはなく , 成すべきと きに成されることもない。控訴 , 反訴 , 各 種の申し立てが際限なく続く。こうなると , 弁護団を雇う余裕のあるほう ( 金持ち ) がや はり有利だ。 争いの対象が高額になった場合 , 担当マ ネージャがその法的な手続きを中止するの は , すべての手を尽くしきった後て、あるで その結果多大な犧牲を払ったとしても現在 の仕事を維持て、きればよいが , 場合によっ ては , 株主の出資金まて争うことになって しまう。どちらの場合にせよ , 弁護してい た側に残されたものが気に入らなければ次 の会社へ移ればよいのだが・ したがって , 弁護士過剰は結果としての 症状て、あって原因て、はないと私は考えてい る。法律的な戦いを開始し , それを継続す るのはマネージャの仕事て、ある。彼らは企 業に損害をもたらすような法律面て、のアド バイスに従うこともよくある。なぜなら , そうすることにより短期的な目的を安全に 達成てきるからだ。逆に , 正しいことに囚 われすぎて , ビジネス的な視点を失ってし まう場合もあるにこては , 倫理とか社会的 責任の欠如には言及しない。それらは別な 話題だ ) 。 さてここて、 , 次のふたつを仮定しよう。 まず , あなたが裁判所や弁護士に支払う法 律に関する費用は適度のものて , 会社の運 営を危うくさせるよラな額て、はない , う仮定だ次は , あなたが正直に ( 真面目に ) 法の精神と文言に照らして。合法的なビジネ スを展開しようとしている , という仮定だ ( こうしたことは長期的なビジネスにとって 常に必要な属性てはあるが , これらを裏切 る人も常に存在する ) 。こうした仮定に基づ いたハイテクビジネス ( たとえば , コンピュ ータソフトウェア ) をどうしたら訴訟から防 げるのだろう。 これはそれほど難しい間題て、はない ( こと て、の私は , 過去 10 年間に多大な金額を法律 に関する費用として使ってしまった者とし て話している。もちろんその費用は本来支 払う必要のないものだった。あなたがたが 信じるのは , こうした経験のある私の話て、 すか ? それとも , 痛い目にあったことの ない人たちの話て、すか ? ) 。ここて、は , 弁護 士と付き合うときに必要だと思われる単純 な原理だけをいくつか覚えてほしい 原理 : 弁護士は法律を実践し ( 取り扱い ) , あなたはビジネスを実践する。この工ッセ イからほかに何も得るものがない場合て、も , この原理だけは心にとめてほしい。技術者 はこの原理をあまりよく理解していないよ うだ。ビジネスタイプの人て、さえこの原理 から外れることがある。 弁護士にアドバイスを求めたときから問 ますか ? いいや , 20 C MAGAZINE 違います。当時と現在 1993 5
ータベースはすて、に第 2 リリースに達してい むので , 著作権侵害などの問題についての るのて、 , こういったものは十分に安定して 懸念があると思われますが。 Atwood ライセンス供与を受けて , 再利用 いるといえます。問題となるのは , C 十十の ような言語を使うといった場合に , プログ される一般目的クラスのライプラリは少な くなっていると思います。標準の著作権保 ラマが古い方法を忘れ , 新しい言語を習う 護てはわずかばかり与えられますが , それ のに 6 か月かかるというようなことだと思い ます。 らはセットリスト , アレー スタックキュ かなり難しいことのようですが , べクトルなどて、ある傾向があります。 て、すから , どんな組織も , 株 , 債券 , ポー Atwood ええ。ルーク・スカイウォーカー とヨーダとの会話て、 , ョーダが「今まて、教わ トフォリオ , 特殊な株など , そのアプリケ ってきたことは , 忘れなさい」というような ーションのドメインに適切な独自のクラス セットを構築する結果になります。現時点 ものて、す。 古い方法は捨て去り , 目を閉じて , プ て、は , クラスセットは個々の組織内にとど ログラミングを感じろと まっています。垂直的マーケットのドメイ ン特定クラスライプラリを開発することは Atwood そうて、す。それに , やるべきこと はとても自然て、す。パンチカード計算機を 義論されていますが , まだ実現されてはい モデルにするのて、はなく , 日常考えている ません。 ような実社会をモデルにするのて、す。 リスクと思われるのは , こういったク " 純粋 " なオプジェクト開発と認識さ ラスライプラリが第三者に渡ると , 企業秘 れているものと C 十十のようなハイプリッド 密が漏れてしまう可能性があるということ 開発環境には顕著な差があると , 多くの人 です。とくに競合企業の場合には問題とな は感じています。私は , オプジェクト指向 ります。 Atwood ええ , その恐れはあります。クラ の開発は C 十十べースの開発よりも数段よ つのチームはこれに従いました。当社は OM く , 数段効果的だという印象を受けたので G への共同入札において , SUN バージョン スライプラリを使用することに , コスト上 すが , この点についてはどうですか ? の利点があることは確かて、す。商業報道関 の組み込みデータ管理コンポーネントとな Atwood B, BCPL, C などといった低レベ 係者は , この技術が商業アプリケーション ったのて、す。おもしろいことに DEC と Hyp の主流になると大声て、報じています。事実 , ルの言語があり , 不幸なことにこれらすべ erDesk チーム側にとって , 当社は , Hyper てがユーザベースのプログラムを幅広く開 Desk 実行の基盤となるデータベースのサプ 複雑な財務モデリング , ポートフォリオ管 理 , 証券アプリケーションの多くに使われ 発してきました。て、すから , C を使用した U ストレートて、した。事実 , 最近当社は , す NIX の世界は C 十十への移行が大変簡単て、あ べての入札者からデータベースのサプスト ています。そして , これらのべンダは自分 たちのやっていることについて他人に何も ると考えられていますが , COBOL, 4GL の レートになるよう誘われています。 いわれたくないのて、す。 世界から C 十十への移行は , とても難しい とすると , とてもうまくいったという とがわかりました。 わけですね。 第四世代言語 4GL と そのため , この技術はワークステーショ Atwood そうて、す。 オプジェクト指向言語 ンや UNIX を使っている電話会社や取引市場 Mic 「 osoft についてはどうでしよう ? に入り込んだのて、す。多分オプジェクト指 Microsoft は OMG に , かなり関わっている このモジュラー製品の使用にあたって , 向 4GL 向けのよいサポートを開発すれば , こ のでしようか ? Mic 「 0S0 代とは何か密接な の技術が主流の MIS ショップに入り込んて、 何か問題やデパッグの可能性についての苦 関係を持っていますか ? いくのて、はないかと思います。 情などはありますか ? Atwood ええ , Microsoft は OMG に関わっ 歴史的観点からすれば , 4GL は , 第一世代 Atwood 開始時期によります。 E-CAD は , ていて , OMG の規格に従っていくのか , 競 のスクリーン定義言語 , レポートジェネレ 約 5 年前に開始しました。当時 , 製品は成熟 合する規格を作ろうとしているのかが注目 ータ , 第三世代言語の最悪例を組み合わせ しておらず , C 十十コンパイラの使用には困 されています。 たものてす。スクリーンをレイアウトして 難が伴いました。しかし , 現在て、は , すべ オプジェクト指向技術は , 基本的に , 視覚化て、きるといったものを越えると , 手 てのコンパイラ技術は安定化しており , デ プログラムのコードとビットの再利用を含 1 一一 1 ロ 巻頭インタビュー Thomas Atwood ( 2 ) 17