言語 - みる会図書館


検索対象: 月刊 C MAGAZINE 1991年6月号
69件見つかりました。

1. 月刊 C MAGAZINE 1991年6月号

SOFT BANK 五ロ 一三ロ ・ C 言語実用マスターシリーズ ー新 C 言語入門ビギナー編 複雑な C 言語の規則を整理、数多くのサンプ ルプログラムを駆使して、 " 誰て、もわかる C " を実現し 林晴比古著定価 1,900 円 ・ポインタ理解の秘伝を伝授 燾秘伝 c 言語問答ポインタ編 C 言語を習得する上て、、最大の難関と言われるポイン タについて、先生と生徒との問答形式て初心者にもわ かりやすく解 柴田望洋著定価 2.600 円 ・ C 言語の秘められた能力を解き放つ C プリプロセッサ・パワー C 言語の中て、も、とりわけ秘められたパワーをもつ プリプロセッサ機能の潜在能力を使いこなすにはどう すればよいかを解言林晴比古著定価 2 , 270 円 ・最新 ANSI C 標準規格に完全対応 詳説 C 言語 H & S リファレンス C 言語プログラマから高い評価を受けている「 C : A Reference Manual 」第 2 版の完訳。 S ・ハービソン & G ・スティール共著定価 4 , 500 円 ・ Turbo C の奧義を示す Tu 「 bO C Ve 「 20 プログラミンク 基本操作はもちろんのこと、内部処理の角財斤をはじ め、 BGI の活用方法など上級操作も詳細に解 井上哲理・酒井恵光・佐藤隆共著定価 2 , 900 円 ・初級 C 言語講座 PIay the C ( 上・下 ) C を身につけたい、これまて、の解説書て、はもの足り ない、そんな要求に応え C の世界を系統的にとらえ直 して解説。 林晴比古著定価各 1 , 550 円 ・最も簡潔で、最も完全な ANSI 標準 C の決定版 STANDARD C ANSI 標準 C の特徴をわかりやすく解説した 「 ANSI C の教科書」ともいえる一冊。 P. O. プラウガー・ J. プロティ共著定価 3 , 200 円 ・自然流プログラムのノウハウを公開 C によるプログラミンク・スタイルブック 「美しいプログラムはよいプログラムて、ある」という 持論とその成果を実証する、待望の一冊。全 C プログ 林晴比古著定価 2 , 300 円 ラマ必言売。 ・ MS ー C 活用の王道を示す ガ MS-C Ve 「 .5.1 プログラミンク 基巣作からコンヾイラの内部処理まて詳細に解説。 最産化のための手法、 ANSI 準拠のプログラミング作 石田秋也ほか著定価 3 , 300 円 法なども紹介。 ・ Quick C 活用書の決定版 0 Quick C Ve 「 .2.0 プログラミング グラミング 本書は、主要な機能からライプラリ関数、エラーメ ッセージまて、を網羅した全 C プログラマ必携の書。 本田正隆・三浦義武共著定価 2 , 900 円 ・ C STEP LJP シリース① 0 上級・ C 言語の応用 50 例 画面制御騙、ディスクドライプ制御騙ほか大きく 4 つに分け、それぞれくふうを凝らしてプログラムを作成。 上原・中山・石田・井上共著定価 2 , 480 円 ・ C STEP UP シリース② ++ 2 ミゾ 0 C 十十プロクラミング 今話題の言語、 C + + の本格的入門書。本書の各項目 をカード別にまとめ、サンカレリストや図版を豊富に 掲載。 門内淳・赤堀一郎共著定価 2 , 680 円 ・ C STEP UP シリース③ yacc による C コンバイラブログラミング 「 C マガジン」連載記事を大幅に加筆。字句解析・構 文解断の基礎からコード生成・最商化まて、、 c コンパイ ラの内部を徹底詳解。近藤嘉雪著定価 3 , 300 円 ・ BAS ℃からのアプローチ C 言語の活用理解 具体例を数多く取り上げ、 BASIC の知識を有効に 利用しつつ、 BASIC から C へ順次移行て、きるように 保坂光・若林淳共著定価 2 , 060 円 解説。 ・基本からのアプローチ C 言語の基礎知識 いけれど実用的なサンプルプログラムを紹介しな がら、 C 言語の基礎知識を解説。 門内淳・乗呆智・上原哲郎共著定価 2 , 580 円 ・実践からのアプローチ C 言語の応用 50 例 C 言語を使い 98k て、どのようなフログラムカ咐三れる のかを、豊富なサンプル例によって紹介。 上原・石田・乗松・中山・高木共著定価 2 , 370 円 2.0 0 C 言語の応用 50 例

2. 月刊 C MAGAZINE 1991年6月号

スタートアップ C + + 実力養成講座 2 回 第 五ロ C 十十か拡張 C 言語であることは前回の記事 でご理解いただけたであろう。今回は , 前回に 引きつづき , 拡張 C 言語の側面から , 「制御構造」 , 関数を中心に , C 言語と機能を比較しながら解 説する。 理 龍崎昌平 前回は , C 言語と機能の比較をしながら , ( セミコロンだけの文 ) がある。 0 て、あれば偽とし else につづく文 2 を選択し実 C 十十を解説した。 C 言語と異なる箇所は , 「プロック」は複数の文を一つにまとめた こて、 , 偽の場合の処理 ( else とそ 行する。 コメントの新しい記述や変数の宣言方法 , ものて、 , 大カッコて、ある、、ドと、ツによって れにつづく文 2 ) は省略可能て、ある。 if ー else に 定数型などて、あった。今回は , C 言語とほば 囲まれる。プロックは , 文法的に単一の文 おいて , 選択されて実行すべき文は一つの 同様の機能て、ある C 十十の「制御構造」 , プロ 文て、なければならない と同等に扱われる。これは , if や while のう したがって , 複数 グラムを構成する関数を中心に解説する。 しろて、使用される。また , 関数を記述する の文を選択し実行させる場合は , 以下に示 すようプロックを用いなければならない 際に , 関数内の処理を構成する文を大カッ 制御構造 コて、囲み , その部分もプロックとなる。プ if( 式 ) { ロックの終わりとなる、、 } 〃のうしろにセミコ 文 プログラミング言語において実行順序を ロンは必要ない 規定するのが制御文て、ある。 C 言語て、は文と 文 プロック , 選択構造 ( if , switch), 繰り返し 構造 (while, for, do-while), goto などの制 ある判定を行い , その真偽によって実行 御文がある。これらの制御文は , C 十十にお を選択させる場合に if 文が用いられる。 if 文 いてもそのままの機能て、提供されている。 の一般形式は以下のようになる。 if ( 式 ) 文とプロック 文 1 「文」は式の最後にセミコロン当クを置いた else ものて , プログラムの中て実行可能な最小 文 2 単位て、ある。文には , 宣言文 ( 変数を宣言す if 文て、は , ( ) 内の式を評価し , その結果 る文 ) , 式文 ( セミコロンて、終わる文 ) と空文 求められた値が 0 以外てあれば真とし文 1 を , else 文 2 if て、は , else ー if 構文を使用し多分岐の判定 を記述することがてきる。 if( 式 1 ) 文 1 else if( 式 2 ) 文 2 else if ( 式 3 ) 124 C MAGAZINE 1991 6

3. 月刊 C MAGAZINE 1991年6月号

LANGUAGE 提携記事 、 C 十十で書く単純な Takingz on 0 0 sk 袵Ⅳ c 槲 W : US 解 4 ・ T Gæ ll/l 灯 & 紐に IANG ・ ( 0M2 R マルチタスクカーネル れいにに (COMP TER LANGUAGE Feb. 1991 ) Bruce EckeI/ 岩谷宏訳 オプジェクトを勝手に走って , 彼ら自らか相互に制御しあえるようにできる。 オプジェクト指向プロク 7 ニイをによるマルチタスクでは , 訓練のいき届いた一群の マルチタスクの マルチタスキングについて深く考えると , それがオプジェクトの集まりを作るのと同 じくらい , プログラミングの最も基本的な 概念て、あることが分かってきます。オプジ ェクト指向のモデルて、は , オプジェクトの 集まりはコンテナクラスて、実装します。コ ンテナクラスによって , 数量や型が様々に 異なる複数のオプジェクトをシステム内て、 容易に管理て、きるようになります。マルチ タスキングも , 個数やタイプの異なる複数 のプロセスの管理を容易にします。いずれ の概念も , プログラミングのあらゆる間題 を解決してくれるわけて、はありませんが , 必要なときにはどうしても必要という性質 のものて、す ( 訳注 : コンテナクラス (container class) とは , 配列 , リストなど , 複数データ の「容器」となるクラス ) 。 コンピュータブログラムは , 同時に複数 の状況を監視したり制御しなければならな い場合がよくあります。そういう場面のコ ードは , 一般的に , 「こっちを on にしろ , そ してあっちの用意が OK なら , 別のを更新し 14 C MAGAZINE 1991 6 ろ」という ( あっちを見たりこっちを見たり の ) 形式になっています。こういうスタイル て、は , ちょっと複雑なプログラムになると , どうしようもないほど煩雑なコードになり ます。もっとスッキリさせるには , 問題を 個々のプロセスに分解して , それらを発進 させ , いっ何をやるかといった制御を個々 のプロセス自身にやらせるのて、す。現実に は , 大きなプログラムの構想からたくさん の小さなプログラムを導き出し , そしてそ の個々の小さなプログラムに , 自分がプロ セッサを専有しているというふりをさせる のて、す。これが , マルチタスキングて、す。 マルチタスキングは古くからある , よく 知られた概念て、すが , それをどの段階て、実 装するかに関しては , まだ意見が一致して いません。プログラミング言語の段階て、実 装している例 ( 言語本体がマルチタスク機能 を実装している例 ) として , Modula ー 2(TCOMPUTER LANGUAGE 』誌 ' 91 年 2 月号のマイケル・ビシニャーニ氏の記事 ( 本 誌 22 頁 ) 参照 ) , Ada, Concurrent-C などが あります。 これらの言語を使うと , タスキングシス テムを自作する必要がなく , 新たなプラッ トホーム ( 他機種 ) への移植も簡単なのて、 , きわめて便利て、す。 B. ストラウストラップと C 十十の開発チ ームは , C 十十にマルチタスキングを含めま せんて、した。また , ANSI C 十十委員会も , 言語本体にそれを含めないと決定しました。 これらの決定は , 言語をむやみに大きくし ないためて、あり , また , 状況によってはい ろいろなスタイルのマルチタスキングが必 要になるからて、す ( 訳注 : 言語本体が一形式 のマルチタスキング機能を実装すると , そ ういった多様性に対応しづらくなる ) 。 もっとも重要なのは , C 十十て、は , 様々な マルチタスキングライプラリを自由に自作 て、きるという点て、す。すて、に , 多くの作例 があります。たとえば AT&T のタスクライ プラリ ( 入手困難 ) , WiIliam Miller の C 十十 ライプラリ (Software DeveIopment Tech- nologies lnc. , P. O. Box 366 , Sudbury, Mass. 01776 ) , Tony Hansen の C 十十 Answer Book(Addison-Wesley, 1989 , 本 誓には本稿よりもずっと可搬性に富む複雑 なシステムが記述されており , ディスクて、 入手て、きる ) などて、す。 ある機能を言語を拡張しないて、実現て、き れば , 拡張は不要て、す ( これが C 十十の考え 方なのて、す ) 。

4. 月刊 C MAGAZINE 1991年6月号

応用 C 言語 C の道目箱 と考えていた。というのは , C 言語関連の書 籍の中て、何回か見た記憶があったからて、あ る。ところが , 実際に C 言語て、書いてみよう とするとなか・なかはかどらなかった。記憶 をたどって , いくっかの書籍を参照してみ ると , そのほとんどがアセンプリ言語て、書 かれていたのて、ある。 ソフトの発展性を考えると , て、きるだけ アセンプリ言語を使用せず , C 言語のみて、記 述したい。だいいち , 本誌は『 C MAG AZINE 』て、あると思い いろいろ試みたが やはりうまくいかず , 「 1cH て、インターバル タイマを設定するときの飛び先は , アセン プリ言語て、記述するしかないのて、あろう」と 結論を下しかけたとき , 参考文献 [ 3 ] 163 頁 のタイマ割り込みプログラムが目に入った このプログラムは , ストップウォッチ的 な機能をもったものて、 , 直接時刻を表示す るものて、はなかったが , すべて C 言語て、記述 されており , 非常に参考になった。今回 , リアルタイム表示関数を C 言語て、紹介て、きる のは , このプログラムのおかげて、ある。 ところて、 , 割り込み処理をプログラムの 中に組み込むと , いろいろな制約が生ずる。 それは割り込みハンドラから ( また割り込み が生じている間 ) , INT21H を含む標準ライ プラリを呼び出した場合 , その動作が保証 されないことなどて、ある。したがって , get char() や printf( ) などの入出力関係の関数は ほとんど使えない。本プログラムて、入力待 ちの状況を getchar( ) を用いないて、 , inkey98 ( ) を使用しているのはそのためて、あ List 1 0 行ー 8 0 ・ ) 011 ワ 3 っ・ 4 ・ - -0 《 0 0 ー 8 0 , 1 ワ乙っ 0 -4 ・戸 0 ^ 0 ー 8 0 、 1 っ乙 -4 ・ L.O ^ 0 ー 8 0 、 1 ワ 0 -4 ・ 0 ^ 0 ″ー 8 0110 乙っ -4 ・戸 0 ^ 0 0 ー 8 0 、 1 っ 0 っ 0 -4 ニ -0 《 0 叮ー 8 01 ーワ 0 っ -4 ・ ^ 0 ー 8 0 ) 0 、 1 ワ 0 っ 4 ・戸 0 ^. 0 ワ 0 ワ 0 ワ 0 っ 0 ワ朝っ 00 CO っっっっっっ 0 っ 0 4 ・・ 4 ・・ 414 ・ -4 ・ -4 ・ -4 , 4 ・ -4 ・ -4 ・′ 0 ′ 0 ′ 0 - -0 - -0 ) 戸 0 ^ 0 cD 《 0 《 0 《 0 ーーーーーー行ーー行ーー 8 8 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 BOTTOMOFF : getdver(xs) ; strcpy(dosver, "Ver. strcat dosver, (s) : pr i ntv " M S ー D O S コマンドメニュー " , WHI TE, 0 , 0 , の : ” ( コマンド選択 ) 1 / 6 " , WHITE , 40 , 0 , の : printv printv ” Menu v2. 20 " , WHITE , 69 , 0 , の : pr i ntv " 日付 : " , WH I T E , 6 5 , 3 , の : printv(" 時刻 :",WHITE,65,6,0); printv("MS-DOS:",WHITE,65,9,0); printv(dosver,WHITE,68, 10 , 0 ) : textkei3(), 1 , 79 , 19,SKY, 12 , 0 ) textkei3(0,21,79. 23,SKY, 12 , 0 textkei3(64,2,78, 11 , SKY , 12 , 0 strcpy()n [ 0 . menu, "dummy") : strcpy()n 0 . comm, "MORE く README. DOC") : strc y()n 0 . help, mn[0 . x ニ 2 : mnC0 . y = 2 : strcpy(mn[l . menu,"F1 マニュアルの補足説明 ( ご使用の前にお読み下さい " ) : strcpy()n 1 . comm, "A>MORE く README. DOC") : strc y()n 1 . help , " MS ー DOS を使用するあたっての注意事項を表示します " mn 1 . x ニ 2 ; mn 1 . y ニ 2 ; 。 cpy ( 00 [ 2 ヨ 0000 , " F2 アプリケーシンの登録 " ) : strc y ()n [ 2 ] . he I p, " 市販のアプリケーションを登録します mnC2f.x=2; mn[2] . y=4 ; strcpy ()n [ 3 ]. menu , " F3 フロッビイディスクの初期化 " ) : strcpy()n 3 . comm, "A>FORMAT % : strc y ()n 3 . he lp, " 指定ドライプのフロッビイディスクを初期化します mn [ 3 . x=2; mn [ 3 ] . y ニ 6 ; strcpy()n [ 4 . menu, strcpy()n [ 4 . comm, "A>") : strc y()n [ 4 . help, mnC4 . x = 2 : mnC4 . Y ニ 8 ; strcpy mn 5 . menu, strcpy mn 5 . comm, "A>") : strc y()n 5 . help, mn 5 . x ニ 2 : mn 5 . y ニ 10 : strcpy()n 6 . menu, strcpy()n 6 . comm,"A>") : strc Y(mn[6] . help, " mn 6 . x=2 : mn 6 . y= 1 2 : strcpy()n 7 . menu, strcpy()n 7 . comm,"A>"); strc y()n 7 . help, mn 7 . x=2 : mn 7 . y = 14 : strcpy()n 8 . menu, strcpy()n 8 . comm, "A>") : strc y()n [ 8 ] . help, " mn 8 . x ニ 2 ; mn 8 . y = 16 : strcpy()n 9 . menu, strcpy()n 9 . comm,"A>"); strc y()n [ 9 . help, mn[9 . x = 2 : mn[9 . y = 18 : clockon() : selbarms(mn, WHITE, WHITE, 9 , 1 , の : inkey98() ; clockoff() : BOTTOMON : CURON; ex i t ( の : 道具箱に追加された関数 clockon( ) 関数 (CM9104011 , List 2 ) 日付 , 時刻の表示の開始 [ 引数 ] なし 応用 C 言語 91

5. 月刊 C MAGAZINE 1991年6月号

ため , 「 COSTIMATOR 」の個々のユーザイ ンタフェイス画面は作業工程の一場面ー場 面を , ユーザインタフェイス画面の流れは 一連の作業工程を , それぞれ反映していた。 はたして , このようなユーザアプリケーシ ョンは保護されるものて、あろうか。機械加 工において職人芸的 , 効率的作業そのもの , および作業の流れを保護することになりは しないか。これはソフトウェアが達成しよ うとする機能・目的 ( つまりアイデア ) て、は ないだろうか。 ューザインタフェイス画面がユーザ業務 を反映している場合 , 同種業務用ソフトウ ェアて、は似たような画面 ( 類似性が認定され る ) にならざるをえないて、あろう。この判決 のように個々の画面の推移を保護すれば , 独自著作の抗弁は役に立たないのて、はない か , 同様の機能・目的を実現するプログラ ムを後発者が開発しにくい状況が生まれる のてはないだろうか。 Johnson Cont 「 0 c. 対 Phoenix ControI Systems,Inc. これは , 1986 年のウェラン判決以来つづ いている SSO 保護の流れを踏襲した内容の 判決て、ある。ジョンソン社は , 汚水処理プ ラントを制御するプログラム「 JC ー 5000S 」を 開発し , これをユーザごとにカスタマイズ して販売していた。フィーニックス社は , ジョンソン社の元社員て、組織された会社て、 , ジョンソン社と競業した。ジョンソン社が ニックス社を著作権侵害 , トレード シークレット侵害などて、訴えた。裁判所は , ジョンソン社有利の判決を下した。 ・コンヒ。ュータブログラムの構成要素には , 「ソースコード , オプジェクトコード , SSO ( ストラクチャ , シーケンス , オーガニゼ イション ) , ユーザインタフェイス , 機能 または目的」がある。 ・プログラムのノンリテラル要素 (SSO, ュ ーザインタフェイス ) が保護されるか否か は , 各事件の特定の事実に基づいて , 問 題となっている要素が表現てあるかアイ 46 C MAGAZINE 1991 6 デアそのものてあるかにかかっている。 ・ JC ー 5000S の SSO は表現て、ある。その理由 としては , ューザごとにカスタマイズし ているということは , 個別的表現の余地 があることを示すものて、 , JC ー 5000S は過 去のデータ集積 , データ集積のための統 合・平均化スキームをポイントタイプと して実現しているが , これは一般的なや り方て、はなく , 若干の裁量範囲や機会が あることを示す。 著作権法て、は , ーっのアイデアに対して , いくつもの表現の余地がある場合と , ーっ しか表現方法がない場合とて、は , 保護され るか否かの判断が異なったものとなる。表 現方法が一つしかない場合は , アイデアと 表現が merge( 融合 ) しているとして , その場 合の表現は保護されないという考え方て、あ る。ならば , 数個のやり方しかない場合は どうなのかという疑問が生じるが , これは 程度問題としてとらえているのて、あろう。 本件裁判所は , 個別的表現の余地 , 若干の 裁量範囲や機会があれば表現といえると判 断した。 小説や絵画には一つのアイデアに対して 無数の表現手段があるのに対し , プログラ ムは効率的処理を求めれば求めるほど最適 手段の表現に収斂する可能性がある。また , そうすべき技術製品て、あることは明らかて、 あり , このケースにおける裁判所の判断が 妥当なものかどうか , 技術者の立場からの American Expree Bank Ltd. Bull HM lnformation 対 検討が必要て、あろう。 働していたが , その後 , アメックス社が SBS 援した。 SBS はプル社のハードウェアて、稼 ション SBS ( TPS6 環境下て、稼働 ) の開発を支 もに , アメックス社の国際金融アプリケー 開発しアメックス社にライセンスするとと Screenwrite て、記述したプログラム TPS6 を て、ある。プル社は自社のコンヒ。ュータ言語 ーザて、ある大手金融アメックス社との争い メインフレーマて、あるプル社と , そのユ を IBM ハードウェアて、も稼働させたことか ら争いとなり , プル社は Screenwrite 言語と TPS6 プログラムの著作権が侵害されたと訴 えた。プル社の訴えに対し , アメックス社 は却下申し立てを行った。今回の判決は , アメックス社の却下申し立てに対する判断 て、ある。 まず , Screenwrite 言語の問題について , 裁判所は , 以下の理由によってプル社の主 張が訴えるに足るものて、はないとした。 ・プル社は ScreenwriteÄ語に関する著作権 登録をしていないのて、 , 訴えを起こすこ とがて、きない この侵害請求の却下は , プル社が Screenwrite 言語に関する著作権登録をし ていないことを法的根拠とするものて、あ り , コンピュータ言語の著作物性の問題 とは関係のないものて、ある。 一方 , TPS6 プログラムの問題について は , アメックス社の却下申し立てをしりぞ け , 本訴に持ち込まれることとなった。載 判所は , いちおう以下のような考え方を示 している。 ・ TPS6 と同じ目的や機能を達成するオペレ ーティング環境は , ほかにもあり得る。 ・アメックス社がプル社の著作権を侵害し たかどうかは , アメックス社ソフトウェ アが TPS6 の目的や機能に必然的て、ない程 度まて、 , TPS6 オペレーティング環境を複 製したかどうかによる。 日本著作権法第 10 条 3 項は , コンヒ。ュータ 言語を保護対象から除外しているが , 米国 法にはこのような規定はない。現在のソフ トウェア開発技術の進歩は , オプジェクト 指向言語などのようなソフトウェア開発に 効果的な言語を用いることて、実現される場 合があり , それは開発方法論として各社が 競っている分野て、もある。本件て、はこのよ うなコンヒ。ュータ言語が著作権て、保護され るのかどうかについての判断が期待された が , 裁判所は判断を回避した感がある。な お , 米国て、は著作権登録が訴訟要件となっ ているため , 前記のような判決理由が可能

6. 月刊 C MAGAZINE 1991年6月号

MAGAZINE 1991 年 6 月 1 日発行 ( 毎月 1 回 1 日発行 ) 第 3 巻第 6 号通巻 21 号 1990 年 2 月 2 日第 3 種郵便物認可 提携・ LA ト、」誌 / 監修・石田晴久 C 言語技術情報誌・ C マカシン 1991 JUN Vol. 3 No. 6 0 980yen 特集・プログラマのための 知的財産権概論 拡大するソフトウェア保護の実態と問題点 1 ・著作権法に見る知的財産権 2 ・著作権法と特許法 3 ・米欧に見るソフトウェア保護の実態 新連載 X68k 活用講座 GCC で学ぶ 68 ゲームプログラミング One Point Edition C プロクラム移植の秘訣 提携記事 ・ Taking Cont 「 0 は 0 Task ・ MuItitasking in M0duIa-2 明解 ANSI C 言語入門講座 新 MS - DOS プログラミンク入門 スタートアップ C 十十 特別付録 : 5"2HD ・ X-GCC ② ・高速圧縮ツール「 LHA Ve 「 .2.12 」 ・ X68k 版 LHNLHAX68k 」 ・叭 NSI C 言語入門講座」活用集 3 ・六角形フロック落とし「 Hext 「 is 」 ・本誌掲載ソースプロクラム

7. 月刊 C MAGAZINE 1991年6月号

は保護されないとしている。 この前提て、具体的な著作物としてのプロ グラムを考えてみる。 まず , なぜプログラムが著作物となるの 立法上の見解は , 「プログラムは作成者の 学術的思想が表現され , かっ , これらの組 み合わせに作成者独自の創意工夫がなされ ているものて、ある。したがって , プログラ ムは著作物て、ある」というものて、ある。 こて , いかに人間の情緒に訴える表現をす るかが目的て , そのために題材や結論を選 択し得る幅が広い小説などとは異なり , そ の目的が効率性を追及するものて、あるプロ グラムは , 結果として最適な方法・手順に 収束されることが多い。したがって , その 表現も類似することが多いと考えられる。 このような特質をもっプログラムを小説な どの一般の著作物と同一に考えてよいかど うかに疑問が残るのてある。 次に , 「一の結果を得ることがて、きなけれ ばならない」ことから , プログラムの最小単 位は一の結果を得ることがて、きるプログラ ムということになる。具体的には , あるプ ログラムを構成するモジュールやルーチン などが考えられる。しかし , 何ステップて、 あればこの定義に合致するかの明確な基準 を示すことは難しい。「指令を組み合わせた もの」から , COBOL などのプログラム言語 て、書かれたソースコードは明確にプログラ ムの著作物となるが , 直接電算機に指令さ れるものて、はないシステム設計書 , フロー チャートなどのドキュメント類はプログラ ムの著作物にはあたらず , 一般の著作物と して保護されることになると考えられる。 38 C MAGAZINE 1991 6 Fig. 1 著作者人格権と著作権 こて、 , プログラム言語て、書かれたソース コードと機械語て、書かれたオプジェクトコ ードの関係はどうなるのか。これに対する められている。具体的には COBOL, FOR 号およびその体系をいう」 ( 10 条 3 項 1 号 ) と定 を表現する手段としての文字そのほかの記 「プログラム言語」については「プログラム 問題がないのて、あろうか。 「プログラム言語」「規約」「解法」については 次に , 著作権法て、保護されないとされる き課題てある。 の法律て、考えるべきなのか , 今後研究すべ う評価するのか , あるいは特許法などほか とになると思われる。これを著作権法て、ど ムのアイデアにより近い部分に存在するこ た場合 , 人間の関与が目的とするプログラ ミングに知識べースなどの AI 技術を利用し るかが問題となる。さらに , 自動プログラ になるが , これら各者の関与をどう評価す ムを作成する者のそれぞれが関与すること 成者 , システムを操作して目的のプログラ プログラミングシステムのプログラムの作 動プログラミングシステムの作成者 , 自動 に , 目的プログラムのデータの提供者 , 自 また , 目的とするプログラムの生成過程 作権法て、どのように考えればよいのだろう ムの権利は , 創作性の有無が前提になる著 ログラミングによって作成されるプログラ て、は , 現在一部実用化されている自動プ て、あるというものがある。 オプジェクトコードはソースコードの複製 この行為には何らの創作行為はないのて、 , コードが機械的に変換されただけて、あり , 見解として , オプジェクトコードはソース 著作者人格権 : 公表権 , 氏名表示権 , 同一性保持権 著作権 : 複製権 , 上演・演奏権 , 放送・有線送信権 , ロ述権 , 展示権 , 上映権 , 貸与権 , 翻訳・翻案権 , ニ次的著作物の利用に関する権利 TRAN などを指しているが , これらは保護 すべきものて、ないことは容易に理解て、きる。 しかし , CASE ツールとして既存の高級言語 に代わるものも出現しており , プログラム と言語の境界が必ずしも判然としないもの がある。また , 将来多くの利用が期待され る AI の知識べースにおいては , プログラム とデータベース ( データベースは別の著作物 としてプログラムとは区別されている ) の判 別の問題も考えられる。 「規約」は , 「特定のプログラムにおけるプ ログラム言語の用法についての特別の約束」 ( 10 条 3 項 2 号 ) と定められている。具体的に は , インタフェイスやプロトコルが考えら れる。両者における規約すなわちルールは 保護されないということて、ある。 企業内のマルチベンダー化やネットワー ク化を実現するには , 異なる開発会社のハ ード間 , ソフト間あるいはハードとソフト のインタフェイスやプロトコルを合わせな ければならない。そして , インタフェイス やプロトコル情報 ( ルール ) を入手するため に , 対象となるプログラムを解析して入手 し , これを基にプログラムを作成すること になる。 ルール自体が権利の対象にならないのは 当然て、あろうが , 実際にはこれらルールが プログラムて、表現された形て、利用されるこ とが多い。そして , インタフェイスやプロ トコルをプログラムて、表現すれば , そのル ールによって表現方法が制約されるために プログラムが似てしまうことが多い。ルー ルがそれぞれのプログラムのアイデアに該 当するならば , これは著作権法の対象とは ならないが , ルールがプログラムに表現さ れるならばプログラムの著作物として保護 されることになる。そうなれば結果として ルールも保護されることになるのて、はない か。このようなインタフェイスやプロトコ ルについて , リバ、一スエンジニアリングの 適法性の問題と , どの部分を著作権法て、保 護すべきか , すなわちプログラムのどこが 表現て、 , どこがアイデアかという問題を明

8. 月刊 C MAGAZINE 1991年6月号

ソフト開発用に最適′ 豊富に揃った C 言語用 ライプラリ。 1 . ニ次元グラフィック・ライプラリー Readers' ①① L 〔定価 1 万円〕 BASIC 等でお馴染みのウインドウ機能を 持ったニ次元グラフィックライプラリーで す。特長的機能として、上方向の指定・斜 め方向の楕円描画・曲線描画・多角形塗り つぶし・拡大文字描画およびマウスによる 座標入力機能を持っています。 2. 三次元グラフィック・ライプラリー 〔定価 1 万 2 千円〕 平行投影・透視投影機能等、基本的な 3 次 元グラフィック機能を持ったライフ、ラリー です。直線・円・楕円以外に、指定平面上 の多角形塗りつぶしも可能です。また、マ ウスによる座標入力機能も持っています。 レイアウト等のグラフィック画面表示プロ グラム作成に便利です。 モニタ募集 、綴じ込みの葉書でこ応募ください 電子帳薄 NOTE 財務会計 2 名 C 教授の基礎講座 3 名 提供 : 株創和サイエンス 提供 : 西友ソフトウェア株 製品問い合わせ : TEL 03 ー 3380 ー 7734 製品問い合わせ : TEL03 ー 3316 ー 0555 ( 載授の基礎ーま 電子帳簿 3. キーボード入力ライプラリー 〔定価 7 千円〕 キーボード入力の煩わしさを解消するため のライブラリーです。パラメータの設定に より、カーソルを指定位置に配置し、指定 範囲から出ないようにしたりします。また、 ファンクションキーその他の特殊キーに対 するコード設定等も可能です。 りて学 / 財務会計ソフト 98note 版 C 言語学習ソフト PC ー 9801 用 日本語 Brife Ver. 3 5 名イ COMPUTER LANGUAGE 1 名 提供 : C マガジン編集部 提供 : 日本システム株 製品問い合わせ : TEL 03 ー 3226 ー 3680 ef : 茂をン第・エをイ、一を事第を 4. マルチ画面ライフラリー ( キャラクタータイプ 〔定価 2 万円〕 マルチ画面入力を支援するためのライフ、ラ リーです。マルチ画面を階層的に表示し、 メこュのマウスクイックが可能です。 ■その他、グラフィック・マウス・ RS -232C のドラ イバー・引 OS 等を C 言語からコールするためのラ イプラリーも揃えています。 ■出荷品には取り扱い説明書及びサンプルソフト (C 言語ソース ) が付いています。具体的な使用方法の 確認、テスト等はサンプルソフトで簡単に行えます。 ■上記のライブラリーは NEC の PC -98XA 、 PC- 9801 LV で開発、動作確認しています。ハイリゾモ ード、ノーマルモード両タイプを用意しています。 OS は MS-DOS(Ver3. 3A ) 、開発ツールは MS - DOS マクロアセンブラ ( Ver2.0 ) 及び MS-C (Ver5. 1 ) を使用しています。 PC シリーズの他の 機種での適合性は確認していません。 ☆詳しい資料をこ用意致しております。 お気軽にお申し込みください。 ☆購入後、使用不適合とわかった場合は一週間以内に こ返送ください。 ( おそれ入りますが送料はこ負担願います ) ※ MS-DOS およÜMS-C 、 MS-DOS マクロアセ ンプラはマイクロソフト社の登録商標です。 0 資料請求は「広告資料請求カード」をこ使用するか、 または直接下記住所まで封書にてこ連絡下さい。 ※電話は対応不可能な場合がありますので御遠慮くだ さい。 〒 571 大阪府門真市下島町 9 の 16 石川聖昭 0 解ル ・応募の注意 トなどの形式て編集にこ協力いただきます。 ◇綴じ込みのはがきに必要事項 ( アンケート こ了承ください。 の回答 , 住所 , 氏名 , 電話番号 , 希望モニタ ◇締め切りは 6 月 18 日必着です。 番号 ) を明記のうえこ応募ください。 あて先 ◇記入もれやモニタ番号が複数記入されてい 〒 108 東京都港区高輪 2 ー 19 ー 13 る場合 , 綴じ込み葉書以外でのご応募は無効 NS 高輪ピルソフトバンク株 とさせていただきます。 「 C マガジン」編集部 ◇モニタに当選された方には , 後日アンケー モニタ係 ① Programming on Purpose ⑩ X68k プログラム ②提携翻訳「 C + + で書くマルチタスク」⑩ C 言語フォーラム ③提携翻訳「 M 。 du 2 による」 @ANSI C : more ④フリーソフトウェア最新レポート @ANSI C 言語入門 綴じ込み葉書裏面の ⑩スタートアップ C 十十 ⑤特集知的財産権 記事評価アンケート ⑩ワンポイントプログラミング ⑥ PragmaC には右記の数字をご ⑦アルゴリズムとデータ構造入門 ⑩プログラム添削 記入ください . ⑩ミニインタビュー ⑧ 00P 思考の周辺 ⑩丹羽信夫の発想快発 ⑨新 MS - DOS 入門 ⑩ C マガ電脳クラブ ⑩ X68k 移植法 ⑩応用 C 言語 .Com/iIer Makers 工テイタ DOS マシン March ( TEL0720 ー 81 ー 6687 留守番電話 ) 158 C M AGAZIN E 1 1 6

9. 月刊 C MAGAZINE 1991年6月号

Q 浮動少数点数の内部表現はど のようになっているのでしようか ? A 浮動少数点数の内部表現は LSI C ー 80 , LSI C ー 86 共通て、 , IEEE 規格に準拠しています。 浮動小数点型は , 符号ビット , 指数部 , 仮数部の三つのフィール ドて、構成されています。符号ビッ トは , 1 ビットて、 0 のときは正 , 1 て、 は負になります。指数部はげたをは いて (biased) います。仮数部は float 型 , double 型て、は先頭の 1 をはぶい た表現て、 , 小数点はいちばん左に あるものとみなされます。 long doub 厄型て、は先頭の 1 は省略されま せん。具体的な内部表現を示しま す (Fig. 1 ) 。 Q LSI C ー 80 , LSI C ー 86 で ROM 化 可能な関数にはどんなものがあり ますか ? A LSI C ー 80 , LSI C ー 86 共通の ROM 化可能な関数と日本語処理 関数を Fig. 2 に示します。 LSI C ー 86 でアセンプリ言語と リンクするプログラム例を教えて ください。アセンプラをマイクロ ソフト社の MASM で使った場合も 教えてください。 A C 言語とアセンプリ言語プログ ラムの連結の簡単な例を示します。 取り上げるのは , 10 進数を 16 進数 に変換して表示するプログラムて 152 C MAGAZINE 1991 6 Q コレエス・アイノレ lnformation from Compiler Makers 31 30 23 22 す ( 付録ディスク bat. c)o f00 というアセンプリ言語て、記述 された関数 ( 付録ディスク f00. a86 ) はパラメータが 1 って、 char 型て、すか ら , 関数呼び出しのプロトコルに ・ doub 厄型 ( 64 ピット ) ・ float 型 ( 32 ピット ) 従って AL レジスタにセットされる ことになります。 f00 の関数値は char 型なのて、 AL レジスタにセット します。 このプログラムは , コマンド行 十 3 十 2 仮想小数点 ( 1. ) LSI C -80 LSI C -86 から 10 進数をえると , それを 16 進数に変換して表示します。 アセンプリ言語の部分を MASM て、書くと , 付録ディスク f00. asm の ビット 十 0 番地 ようになります。 仮数 ( 頭の . 1 は省略 ) 2 進の指数 ( 127 のげたばき ) 十 7 十 6 十 5 十 4 十 3 十 2 仮数の符号 十 1 十 0 番地 63 62 52 51 仮数 ( 頭の . 1 は省略 ) 仮想小数点 ( 1. ) 2 進の指数 ( 1023 のげたばき ) 仮数の符号 十 9 十 8 十 7 十 6 十 5 十 4 十 3 仮数 十 2 十 1 ・ long doub 厄型 ( 80 ビット ) 79 78 64 63 仮想小数点 2 進の指数 ( 16383 のげたばき ) 仮数の符号 ROM 化可能な関数と日本語処理関数 Fig. 2 isalpha isalnum isxdigit memcpy strc py Strncmp strspn movmem setjmp va Sta rt lnp a tOl strtoul bsea rc h bs isupper islower iscntrl isgraph tolower lSa SCII memmove memset strncpy Strcat strle n strch 「 strcspn strpbrk setmem longjmp isdigit isprint toupper memcmp strncat strrc h 「 strtok atold rand max xprintf isspace ・ L C ー 86 ではさらに次の関数が ROM 化できます va_arg outp atOi strtod q sort sprintf va end a tOf strto 旧 tTlIn sscanf ispunct memchr strcmp strstr StrtOl srand a bs xscanf lnpw outp8 far memcpy far strcpy far st 「 ncmp far strspn far setmem atan fabs frexp outpw inp8w fa 「 memmove far strncpy far strlen far strcspn ldiv C OS atan2 log10 fm od ldexp inp8 outp8w far memset far strcat far strchr far strpbrk ta n sinh exp ceil far memcmp far strncat far strrchr fa r strtO k asln COSh POW floor 十 0 番地 ピット fa 「 memch 「 far strcmp fa 「 strstr far movmem acos tanh sqrt modf

10. 月刊 C MAGAZINE 1991年6月号

関数へのポインタ N mo 化 第 7 回 きだあきら してきた。今回は関数へのポインタについて解説する。 前回までは ( テータ ) オプジェクトへのポインタについてお話 関数へのポインタ くわからないとかいう場合が少なくないよ か関数へのポインタは苦手てあるとか , よ 通りポインタをマスターした人ても , なぜ タは難解て、あるという話をよく聞く。ひと い。それにもかかわらず , 関数へのポイン 扱うことがて、きるのは不思議なことてはな らないのだから , 関数へのポインタを取り する型の情報を備えたアドレス値にほかな してポインタは , 端的にいえば対象物に関 して操作することは可能なはずて、ある。そ 数と同様に , 関数もそのアドレスを取り出 て、メモリ上に記憶されるのて、あるから , 変 を除けば , 変数も関数もすべて何らかの形 考えてみれば , 記憶クラスが register の変数 になる。 C 言語のインプリメンテーションを 「関数」という実体を間接的に指し示すこと ている。関数へのポインタは , 当然ながら さて , C には関数へのポインタが用意され て、ある。 制限 ( 自由度と考えるべきか ? ) がっくだけ オプジェクトの型は何て、あるか不明」という 変わりはない。ただ void * は「ポイント先の ェクトを指し示すためのものて、あることに が違ってくるが , それて、も何らかのオプジ のものて、ある。なお , void * の場合少し話 体 ( オプジェクト ) を間接的に指し示すため C におけるポインタは , 一般に具体的な実 関数へのポインタは , 関数を間接的に呼 び出すための機能て、あるとも解釈て、きる。 目的とする関数名を指定して呼び出すのが , 一般的な直接呼び出して、ある。それに対し て , あらかじめ目的とする関数へのポイン タを , 「関数へのポインタ」型の変数に格納 し , そのポインタ変数の値を利用して呼び 出すのが「間接呼び出し」て、ある。「間接呼び 出し」の機能をもつ言語は C だけて、はない 有名なところて、は ,PascaI や FORTRAN に も存在する。さらに Lisp 系の言語て、は間接 呼び出しは日常茶飯に用いられている。し かし , それらの言語て、は , 間接呼び出しを 行うことが困難な作業て、あるとは認識され ていないようだ。て、はなぜ , C における関数 へのポインタは , 苦手意識をもって受け止 められるのだろうか。 関数へのポインタを難解なものにしてし まっている理由として , ーっはその構文的 な記法の問題があると思われる。関数への ポインタ funcp を宣言する場合は , 以下のよ うに書かなくてはならない ( int を返す関数へ のポインタ funcp , 引数の型情報は省略して いる ) 。 int (*funcp)( ) ; また funcp を通じて関数を呼び出す際に ANSI 以前のコンパイラて、は次のように宣言 と類似した形式て、書く必要があった ( 引数は ないものとする。また , 呼び出した関数が 返してきた値は無視している ) 。 これらの記法は , 見慣れた普通のポイン タ変数宣言や , 関数呼び出しとかなり異な っており , 一見して難解て、あると感じさせ てくれる。大げさにいえば , これらの記法 は , それを見慣れていない人にとっては何 のことか , わけのわからない呪文に等しい このことが , 関数へのポインタに対する最 初の , そして最大の問題て、あろう。しかし ながら , 幸いなことに ANSI 標準とそれ以前 のいくつかの処理系て、は , 以下のように記 述することが可能て、ある。 funcp( ) ; これならば , 通常の関数の直接呼び出し とまったく変わらない。この記述を可能に するために , ANSI て、は関数呼び出しに関す るセマンティクス ( 意味的解釈 ) を K & R のも のとは変更している。これは非常に興味深 ことなのて、後て、詳しく述べる。 ただ , 関数へのポインタを通して関数を 呼び出す場合には上述のように直接呼び出 し的な記述が可能になったが , 残念ながら funcp を変数として ( 関数の仮引数以外の場 所て、 ) 宣言する場合には , ANSI ても最初に あげたとおりの int ( * funcp)( ) ; という記述 を強いられる。 関数へのポインタが難解て、あるもうーっ の理由は , その必要性・必然性が理解され こともあるのてはないかと考えてい る。多くの教科書が適切な使用例を示して ことが , 関数へのポインタに対する 理解を阻んているのてはないだろうか。 ANSI C ー more 105