[ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 29 ] fLSI C ー 86 Ver. 3.2 試食版ューザー extern unsigned _heaplen = 0X2800 ; 87 : ( リファレンスマニュアル』 , NEC 『 MS-DOSVer. 3.1 マクロアセンプ ラマニュアル』 , NEC 『 MS-DOS Ver. 3.1 ユーザーズリフ アレンスマニュアル』 , NEC 『 MS-DOS Ver. 3.3B プログラマー ズリファレンスマニュアル』 V01.1 , V01.2 , NEC TMS-DOS Ver. 3.3B ューザーズリ ファレンスマニュアル』 , NEC TMS-DOS 工ンサイクロペディア V olume 1 システム解説編』 , アスキー [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] fMicrosoft C Ver. 6.00A Professi ona 1 DeveI opment System Referen ce 』 , Microsoft fMicrosoft C Ver. 5.1 Optimizing Compiler User' s Guide 』 , Microso ft TMicrosoft C Ver. 5.1 Optimizing Compiler Language Reference 』 , M icrosof 『 Microsoft C Ver. 5.1 Optimizing CompiIer Mixed Language Progra mming Guide 』 , Microsoft [fMicrosoft C Ver. 5.1 Optimizing Compiler Run-Time Library Refer ence 1 , 2 』 , Microsoft fTURBO C Ver. 2.0 USER' S GU [ 25 ] [ 26 ] [ 27 ] Y REFERENCE V01.1 , V01.2 』 , B [ 28 ] TTURBO C 十十 Ver. 1.0 LIBRAR [ 24 ] TTURBO C Ver. 2.0 REFERENC E GUIDE 』 , BORLAND TTURBO C 十十 Ver. 1.0 INTRO DUCTION 』 , BORLAND TTURBO C 十十 Ver. 1.0 USER' S GUIDE 』 , BORLAND TTURBO C 十十 Ver. 1.0 PROGR AMMER' S GUIDE 』 , BORLAND [16]TMS-DOS 工ンサイクロペディア V olume 2 リファレンス編』 , アスキー [ 17 ] TMicrosoft C Ver. 6.00A Professi mming Guide 』 , Microsoft onal DeveI opment System Progra ORLAND ズマニュアル』 , ヤノヾン 工ノレ・エス・アイジ IDE 』 , BORLAND List 1 1 : 4 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 18 : 19 : 21 : 23 : 26 : 28 : 31 : 33 : 34 : 35 : 38 : 39 : 41 : 48 : 49 : 52 : 55 : 拡張子によるコマンド起動ユーティリティ List ファイル名 : exec. c N. Nakashima 作成 1991.03.24. * Copyright (C) 1991.03. 24. * ハ・一シ・ヨン 0.01 拡張子によるコマント・起動ューティリティ 56 : 57 : 58 : 62 : 69 : 71 : 73 : 74 : 75 : 76 : 77 : 82 : 83 : 84 : 85 : 86 : 88 : 89 : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 98 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : 109 : 110 : 111 : 68 : #def ine MAXARG 67 : #define PATHLEN 66 : #define TRUE 65 : #define FALSE 64 : #def ine NOERR 63 : #define ERR 61 : #endif 60 : #define ATR_EXEC 59 : #else extern uns igned stklen ニ 0X2800 ; / * ヒーフ。・サイス・ / * スタック・サイス・ ( _A_RDONLY ー A HIDDEN ー _A_SYSTEM ) 使用法 : exec Carg1 arg2 . . の中で最初に指定された拡張子に対応したコマント・を起動します。 argl , arg2, 環境変数 DATPATH により、ファイルを検索するハ。スを指定します。 コンフィキ・ユレーション・ファイル EXEC. CFG により、拡張子に対応した起動コマント・ コンフィキ・ユレーション・ファイル EXEC. CFG は次の順で検索します。 ( 1 ) カレント・テ・イレクトリ ( 2 ) EXEC. EXE と同じテ・イレクトリ ( 3 ) 環境変数 DATPATH 1991.03.24. ハ・一シ・ヨン 0.01 20 : コンハ。イル・スイッチ 22 : Microsoft (R) C Compiler Version 6. 00A 24 : cl /J /W3 /Zp exec. c execovl. obj /link / st : 0X2800 / cp : 0X500 を指定します。 0 0 ( !FALSE ) ( 3 + 64 ) ( 255 + 1 ) / * ェラー時のリターン・コート・ / * ハ。スの長さ ( ” d: \ ” + ハ。ス ) / * 引数の最大個数 70 : #if defined( MSC-VER ) Ⅱ—TURBOC— ) extern int exec_ovlay( char * , char * ) ; 72 : #endif pathset( int, char * , char * ) , searchenv( char * , char * , char * ) , void getcmd( int, char * * , char * , char * , char * ) , char *getext( int, char * * ) , *jstrupr( char * ) : getline( char * , char * , char * ) ; int exec—main( int, char “ ) , getcfg( char * , char * , char * ) , usage( void ) ; 80 : char env—datpath[] env—path ] ” DATPATH ” , ” PATH ” , 25 : cl /J /W3 /Zpl exec. c execovl. obj /link sli r + libh / st : 0X2800 / cp : 0X500 32 : Turbo C Version 2.0 / Turbo C + + Version 1.0 30 : cl /J /W3 /Zpl exec. c /link + libh / st : 0X2800 / cp : 0X500 29 : cl /J /W3 /Zp exec. c /link / st : 0X2800 / cp : 0X500 27 : Microsoft (R) C CompiIer Version 5.10 exec-cfg PATHLEN ] = "EXEC. CFG ”・ int fver ・ / * ファイル検索ハ。ス / * 環境変数 PATH / * コンフィキ・ユレーン・ファイル / * 起動時のコマント・・ラインの表示 事 / 事 / int min( int argc, char *argvC] ) if ( argc ← 1 ) { / * 引数なし ? char argbuf[ BUFSIZ ] , *ßrg; tCC ー響 exec. C execov 1. Obj 36 : LSI C ー 86 Ver 3.20 ICC exec. 42 : #include く stdio. h> 43 : #include く *. h> 44 : #include く jctype. h> 45 : #include く string. h> 46 : #include く jstring. h> 47 : #include く stdlib. h 〉 #include く dOS. h> 50 : #ifdef 51 : #include く dir. h 〉 53 : #define Char **newargv; int argmx, newargc, num ニ 0 : gets( argbuf ) : / * わ。ション・スイッチの最大個数 / * 引数を標準入力から取得 c -k/st : 0X2800 / cp : 0X500 #include く process. h> TURBOC dos findfirst( p, argmx = ( strlen( argbuf ) + 1 ) / 2 + 1 ; newargv = ( char ) lloc ( ( argmax + argc ) * sizeof( char * ) ) : fprintf( stderr, ” exec : メモリが足りません。 *n ” ) : if ( newargv = NULL ) { at tr, buf ) findfirst( (p), (buf), (attr) ) ー FA- return ( 1 ) ; newargc = 1 : argc—ー : newargv 〔 num + + ] : *argv + + : ニ argbuf; while ( isspace( *parg ) ) parg + + ; while ( *Enrg ) { if ( num 〉 = argmx ー argc break; newargc 十十 : ー 1 ) / * 自フ。ロセスファイル名 54 : #define find t ffblk #define ATR_ÉXEC ( FA_RDONLY HIDDEN ー FA_SYSTEM ) 88 C MAGAZINE 1991 12
最新ロロロロレポート 修正ソースの再アセンプルの結果 , アド 所が多いだけにやっかいて、ある。 レスがずれてしまうと , アドレス情報は修 4 コードとデータの分離 正しなければいけないが , 逆に数値データ 自己修正型のコードや , 上記の間題点な は変更してはいけない この問題は対象箇どからコードとデータを完全に区別て、きな PRINT. SYS の逆アセンプルリストの一部 ことがある。やはりアドレスがずれた場 合には同様の問題が生じる。 SOLJ 日 CE 日での対応 これらの問題点に対し , SOURCER て、は 逆アセンプル時にレジスタに代入される値 を監視して , ジャンプ先のアドレスをなる べく正確に決定するようにしている。また , オリジナルのコードに冗長な部分があると きには , 再アセンプルに使用するアセンプ ラに合わせて n 叩を適当に挿入し , 生成され るコード長が一致するようにしている。 うすることて、 , 不完全な逆アセンプルリス トを再アセンプルした場合て、も , 見かけ上 同じコードが生成て、きる。 ただし , この機能は List 2 に示したように 正しく動作しない場合があった。したがっ て , 不完全な逆アセンプルリストをソース として再アセンプルするときには , アセン プル後にラベルの位置がずれていないかを 点検し , ずれているときには修正してやる 必要がある。 List 2 に示した拙作 BP. EXE はこれらの修 正をほどこしたのち , 再アセンプルして動 作するようになった。 さらに SOURCER は , 問題が起きる可能 性があると判断した部分には , コメント欄 : * という印を書き込んて、 , 注意を喚起 してくれるようになっている。この部分は とくに念入りにチェックする必要がある。 これまて、に書いた間題点などを避けるた め , マニュアルて、は小規模な変更に対して は再アセンプルをせずに , 直接オリジナル のバイナリファイルにパッチ当てをするこ とを勧めている。やむを得ず再アセンプル が必要な場合には , 完全なリストが得られ るまて、定義ファイルを修正しながら逆アセ ンプルを繰り返すか , 前述したような再ア センプル後のアドレスチェックが必要て、あ 大規模な修正 , とくに命令コードの追加 を行うときには , 逆アセンプルリストを基 にプログラム全体の構成を理解し , 間違っ ている部分をすべて修正しなければ , 正し LiSt segment byte public assume cs:seg_a, ds:seg_a 0 far 0FFFFFFFFh 0A040h offset strategy offset commands ' PRN org proc Jmp Jmp JÆP data_22 data 23 data 24 data_25 data 26 da ta_27 data 28 data 29 da ta_30 data_31 da ta_32 da ta_33 data 34 data_35 data_36 data_37 data_38 data_39 data_40 data_41 data_42 pr i nt endp print 55A7 : 0000 FFFF FFFF header 55A7 : 0004 A040 attributes 55A7 : 0006 0045 inters 55A7 : 0008 0050 55A7 : 000A 50 52 4E 20 20 20 char dev 55A7 : 0010 20 20 55A7 : 0012 . E9 05F3 55A7 : 0015 E9 0632 55A7 : 0018 E9 0AD7 55A7 : 001B . 1474 55A7 : 001D 0088 55A7 : 001F 0088 55A7 : 0021 0082 55A7 : 0023 0088 55A7 : 0025 007E 55A7 : 0027 0088 55A7 : 0029 0088 55A7 : 002B 05EA 55A7 : 002D 05EA 55A7 : 002F 05F9 55A7 : 0031 0088 55A7 : 0033 0088 55A7 : 0035 0088 55A7 : 0037 0088 55A7 : 0039 0088 55A7 : 003B 0F86 55A7 : 003D 0082 55A7 : 003F 0082 55A7 : 0041 0FE7 55A7 : 0043 0858 : ( 0608 ) ; ( 064A ) ; (0AF2) 10C ー 8 10C ー 15 10C ー 77 offset 10C 164 offset 10C ー 4 offset 10C 4 offset 10C ー 2 offset 10C 4 offset 10C 1 offset 10C ー 4 offset 10C 4 offset 10C 6 of fset I oc ー 6 offset 10C ー 7 offset 10C 4 offset 10C ー 4 offset 10C 4 offset 10C 4 offset 10C ー 4 offset 10C100P ー 138 offset 10C 2 offset 10C 2 offset 10C ー 143 offset 10C ー 43 External Entry POint 55A7 : 0045 55A7 : 0045 2E: 89 IE 009E 009E = の 55A7 : 004A 2E: 8C 06 00A0 : ( 55A7 : 00A0 = の 55A7 : 004F CB far far word ptr cs :data 45 , bx word ptr cs :data 45 + 2 , es strategy proc mov mov retf endp ; ( 55A7 : Return st rategy External Entry POint 55A7 : 0050 55A7 : 0050 50 55A7 : 0051 53 55A7 : 0052 51 55A7 : 0053 52 far proc push push push CX push dx commnds 最新開発環境レポート 139
市販のコンパイラが , 市販アプリケー ションやフリーソフトウェア , シェアウ ェア , およびそれらの付属ツールにどれ だけ用いられているかを調査し , 普及し ているコンパイラをチェックする。 50 C MAGAZINE 1991 12 、 0 場合が多いのて , MS ー C より手が届きやす 抑えてもっとも多い。作者が個人て、ある ェアについては TurboC ( 十十 ) が MS ー C を 一方 , フリーソフトウェア , シェアウ 2 位以下は誤差の範囲て、ある。 いうことて、 MS ー C が選ばれているのだろう。 第一だし , その上て、高品質なコードをと 性 , サポート体制のよさなどの安全性が 合 , 価格よりもバグの少なさなどの安定 かに凌いて多い。やはり市販ソフトの場 -C を用いて開発されたものがほかをはる べただけだが , 市販ソフトにおいては , MS 数多くあるソフトの中のごく一部を調 査結果は Fig. C, Fig. D のとおりてあっ 各ソフトごとの結果を明記しないが , 調 ェアは Fig. A, Fig. B のとおりて、ある。 も含む ) , フリーソフトウェア , シェアウ 調査した市販ソフトウェア ( 付属ツール 断した。 領域先頭のコピーライト表示などから判 いが , ほとんどのソフトウェアはデータ に使用コンパイラが書いてあることが多 フリーソフトウェアは , ドキュメント 偏見て、選択した。 まわっていると判断されるものを独断と フリーソフトウェアの場合は現在広く出 合は売れ筋ソフトの情報て上位のもの , 調査対象としたソフトは , 市販品の場 based'tk インタを使うように書き換えると , List 11 のようになる。実行速度は後者のほ うが 3 % ほど高速て、あった。 ほかに , 細かいところて、は , Fig. A 4.5 Fig. D グラフィック関数の強化 クイックコンパイルオプション Tiny メモリモデル (. com ファイル ) long doub 厄型 ( 80 ビット ) が使える コラム開発用コンノヾイラ調査 篁雅之 くかつ高速なコンパイラという基準て、 TurboC ( 十十 ) が利用されているのて、あ ろう。 また LSI C ー 86 については , 市販ソフト て、は LSIC ー 86 て、開発されたものは見当た 調査対象とした市販ソフトウェア らなかったが , スモールモデルが試食版 v 引 at ⅱ e が意味的にも実装された 名前のない構造体や共用体が使える などの新機能がある。 たとえばグラフィックは , として無料て、配布されていることから , 個人ユースとしてはもっとも手の届きや すい処理系なのて、あろうか , フリーソフ トウェア , シェアウェアに LSI C ー 86 を用 いたものが散見され , 堂々の入賞 ( ? ) と なった。 Fig. B Fig 一太郎 Ver. 4.3 dBASE Ⅲ plus Tu 「 bo C 十 Microsoft ExceII Ver. 2.1 NO on Utilities Ver. CCT-9811 駅すばあと Z' s staff kid Ver. 2.00 LHA jgawk bdiff/bupdate emTeX prt 円 . exe Microsoft C Windows 3.0 Microsoft MultipIan Ver. 4.1 Wordstar Ver. 6.0 fo 「 PC -9801 FILE Master 日 WIZARD 98 Ver. 3.0 Aldus PageMaker 3. OJ/SE 調査対象としたフリーソフトウェア , シェアウェア PKZIP jperl LS ト C 試食版 KBDD diet arJ djgpp EXE386 Melware WXII 十 Lotus ト 2 ー 3 TOWNS gcc dviout/dviprt exexe perl 市販ソフトウェアで使用されているコンバイラ MSC Turbo C ( 十十 ) High C ※ Lattice C 1 5 個 3 個 1 個 ■・■ ■・ ※本特集で取り上げた High C 386 ではない フリーソフトウェア , シェアウェアで使用されているコンバイラ LSI C ー 86 ※ MS-C Turbo C ( 十十 ) 3 個 6 個ー・■・■■ 10 個・・■・■・・・■・ ※ LSI C ー 86 は , 試食版と製品版は同じとしてカウントした
応用 C 言語 C の道具箱 プウインドウ内て、の書き換えは , その下に 表示されているウインドウの内容には影響 を与えないとともに , サプウインドウのサ プウインドウも可能て、ある。 C の道具箱の subwin 関数の機能は , UNI X 版 curses て、は newwin 関数て実現されてい る。そこて、 MS-DOS 版 curses の作成にあた り , この subwin 関数を newwin 関数に書き換 えることにした。ただし , 単に関数名を変 更するだけてなく , 若干の仕様変更も行う。 List 1 を見ていただきたい。 subwin 関数 ては , 使用するウインドウ構造体をあらか じめ定義しておく必要があった。これに対 し newwin 関数て、は , 使用するウインドウ構 造体を関数内て、定義している。通常関数内 て定義した領域は , return 後書き換えられて しまうが , この関数て、はウインドウ構造体 の領域を calloc 関数て確保し , その領域のア ドレスを return<' 返す形をとっている。たと えば subwin 関数の場合は , List 2 のような 形て、呼び出す必要があったが ,newwin 関数 て、は , List 3 のような呼び出しになる。 両関数間のいちばんの相違点は , newwi n 関数てはウインドウ構造体をポインタ型変 数て、定義てきるが , subwin 関数て、はて、きな いという点にある。この newwin 関数を使用 したプログラムは ,UNIX 版 curses に互換の とれたものになっている。 List 1 uns i gned ys tart, 25 : unsigned xstart) 26 : 28 : WINDOW *pw , 29 : uns igned x2 ; 30 : y2; 31 : sizeof(WINDOW ) ) ・ * ) calloc ( 1 , pw = ( WINDOW 32 : 33 : x2 = xstart + xlen ー 1 ; 34 : y2 = ystart + ylen ー 1 ; 35 : 36 : Ⅱ x2 〉 = 80 Ⅱ ystart く 0 Ⅱ y2 > = 25 ){ if(xstart く 0 return(NULL) ; 38 : 39 : pw—>xlenn = xlen 40 : pw->ylenn = ylen ・ 41 : pw->xl 42 : XS tart PW->YI 43 : = ys tart / * 外部変数で定義されたデフォルト値を設定 ニ Gcurx 44 : pw¯>curx = Gcury pw—>cury 45 : Ggattrib pw->gattrib 46 : = Gkattrib ・ pw->kattrib = Gkkind pw->kkind 48 : = Gclearl pw->clearl 49 : = Gleave pw- 〉 leave 50 : = Gscroll 一〉 scroll 52 : (pw->psavecode = wsaveinm(pw)) = = NULL){ if( 53 : error ( " メモリが充分ではありません " ) ; 54 : 55 : 56 : (pw->psaveattr = wsaveinm(pw)) = = NULL){ if( error ( " メモリが充分ではありません” ) ; 58 : 59 : if(( pw->psavetnp = wsavemem(pw) ) = = NULL)( 61 : myerror(" メモリが充分ではありません subwin 工ラー” ): 62 : 63 : return(pw) : 64 : subwin. tst 1 : #include ” config. h ” 2 : 3 : #define EXTERN 4 : 5 : #include く stdio. h> 6 : #include く stdlib. h> 7 : #include く conio. h 〉 8 : #include く dos. h> 9 : 10 : #include ” pldwn. h ” 11 : #include ”響ⅲ do 響 . 12 : 13 : #include ” cboxprot. h ” 14 : 15 : 16 : void main(void) 17 : { 18 : char moj i [ 256 ] ; 19 : unsigned long key 20 : uns igned long outkey ; 21 : int i 22 : MWINDOW winl ; 23 : char *tmp 24 : subwin(&winl, 10 , 10 , 5 , 3 の 25 : 26 : List 2 p 血 tw の強化 前回 mvwprintw 関数を紹介したが , 書式 指定がてきないものて、あった。このままて は , UNIX 版 curses との互換性が完全にとれ ないのて、 , 今回はその書式指定に挑戦した。 しかし , この書式指定機能は簡単には実現 というのは , それにより引数の数 しない が不定となってしまうからて、ある。 C 言語の 関数は , 多くの場合 , その引数の数が固定 されている。しかし全部が全部固定されて たとえば printf や scanf いるわけてはなく , のように不定の場合もある。今回いちばん 苦労した点は , この引数の数が一致しない 応用 C 言語 99
明解 AWC 言語 入門講座 ( * x). height せん。したがって , ポインタをやりとりし その hiroko 関数を gstudent 構造体に対応 と奇妙な形のものが出現します。 Fig. 4 を見 なければいけないということも理解してい するように書き換えましよう。ひろ子さん ながら考えましよう。 hirok 。関数が引数と ますよね。 8 月号の hiroko 関数は身長のみを は太った人も嫌いなのて、 , 体重が 80kg を超 して受け取る x は , s を指すポインタて、す。 扱っていたのて、 int へのポインタを受け取り えていたら , その子の体重を 80kg にしてし ポインタに * 演算子を適用することにより , ましたが , 今回は gstudent 構造体へのポイン まうという能力も持っています。 List 6 がそ そのポインタの指すオプジェクトの実体を タを受け取ります。 のプログラムて、す。 表すのて、したね。したがって , * x は s の別 C 言語て、は , 値による呼び出ししかて、きま 11 行目には 名となり S = * X 学生テータのソート の図式が成り立ちます。 s の身長メンバは s. height と表しますから , * x の身長メンバに アクセスするには , 同様に * x. height とすれ ばよいように思えます。しかし . 演算子の優 先順位は * 演算子より高いのて、 ( 本連載 9 月 号参照 ) , * (). height) と解釈され , 文法的 に正しくないものとなります。よって ( * x). height のように必ず ( ) が必要となります。 しかし , ( * x ). height と書かなければなら ないのて、はめんどうてすね。そもそも ( ) の 書き忘れを起こしがちてす。そこは簡潔さ が売りものの C 言語て、すから , その点はぬか りはありません。 (*x). height は x— >height とも記述てきることになっています。ー > 演 算子は矢印の形をしていますから , 通常は アロー演算子と呼びます。 List く stdio. h 〉 1 : #include 2 : #include く string. h 〉 3 : 4 : #define MAX 5 5 : 6 : struct gstudent { char name[20] ; / * 氏名 * / / * 身長 * / height; 8 : i nt / * 体重 * / float weight; 9 : / * 奨学金 * / long schols ; 10 : 11 : } ; 13 : void swap(struct gstudent *X' struct gstudent *y) 14 : { S truct gstudent te 叩 : 15 : temp *y = temp; ミ 22 : void sort(struct gstudent int n) 23 : { int k = n-l; 24 : while (k 〉 = の { 25 : int i, j 26 : for (i = 1 ; i く = k; i + + ) if (data[i-l]. height 〉 data[i]. height) ( 28 : 29 : 1 swap( &dataCi], &dataCj]) ; 30 : 31 : 32 : 33 : 35 : 36 : int main(void) 38 : int i; struct gstudent dat[] = { 39 : 178 , 61.0 , 8000 の , / * 佐藤宏史君 * / { ” SatO ” 40 : { "Sanaka", 175 , 60.5 , 70000 } , / * 佐中俊哉君 * / 41 : / * 高尾健同君 * / { "Takao", 173 , 80.0 , 0 } , 42 : 165 , 72.0 , 7000 の , / * 平木翫 ke 君 * / { ”翫 ke ” 43 : , 179 , 77.5 , 7000 の , / * 真崎宏孝君 * / { ” Masak i ” 44 : 45 : 48 : 49 : 50 : 51 : 52 : ポインタ ptr が指す構造体のメンバ mem は ( * ptr). mem ではなく , ー > 演算子 ( アロー演算子 ) を 用いて ptr— >mem と簡潔に記述できる sort(dat, MAX) ; 身長体重奨学金 " ) ; puts ( " 氏名 puts ( " ー for (i = 0 ; i く MAX; i + + ) printf( ” X-8s % 6d % 6.1fX71d*n", datCi]. name, dat[i]. height' datCi]. weight, dat[i]. schols) : puts ( " ー return( の ; 【問題 3 】 List 4 の setxyz 関数を void setxyz (struct xyz * xyz, int x, int y, int z) ・ の形式に書き換えよ。 第 明解 ANSI C 言語入門講座 1
関数の作成て、ある。 List 4 をご覧いただきたい。奇妙に思われ るかもしれないが , 引数がひとって、ある。 しかし実際この関数をプログラムて、使用す る場合にはふたつ以上の引数を指定する場 合もある ( このため printw については , プロ トタイプ宣言は行っていない。工ラーが出 てコンパイルて、きなくなってしまう ) 。 て、の、、ミソ′′は , (int * )&str ; の部分て、ある。これは引数のスタックのア ドレスを変数に代入しているものて、ある。 これは List 5 の関数 , mvwfmtpr 関数の引数 として与えられている。 mvwfmtpr 関数は , このスタックのアドレスを受け取り , 最初 に指定した引数群を分解し , 変数へ代入し ている。これによって , 引数の個数が不定 て、あっても対応が可能になるわけて、ある。 実は , この方法は『 C プログラミングノー ト』 ( 参考文献⑦ ) て、紹介されている方法を 参考にしている。余談になるが , 筆者は洋 書も含めて 200 冊以上の C 言語関連の書籍を 持っているが , 今まて、にもっとも参照した と思えるのがこの本て、ある。この本は入門 者用のものて、あるが , 新たに関数を作成す る際のポイントが抑えてあり , 複雑なプロ グラムを考えている際にも , ヒントになる ことが多く含まれているのて、 , 一読をお勧 めする。 さて , この書式指定機能を加えた printw 関数のサンプルプログラムが List 6 て、ある。 またこのプログラムは , UNIX 版 curses と互 換性がとれている。以上のような変更を加 えた関係て、 , curses. h の内容も変更した。ま た , initscr 関数も若干機能が拡張されてお り , List 7 のようになっている。 道具箱に追加された関数 ne 旧 ( ) 関数山 st 1 , CM911201 ) ーーウインドウの定義およびバッフアの確保 [ 書式 ] 100 C MAGAZINE 1991 12 2 List for ( i = 0 ; i く 25 ; i + + ) { tmp = wsavemem(winl) ; wsave(winl, tmp) ; mvwprint(winl, 5 , 2 , ” ddddddddddddddddddddd ” ) ; wrefresh(winl) ; getch() ; wrestore(winl, tmp) ; exit( の : 叮ー 8 0 》 0 1 よっなっ 0 4- L.n れ 0 叮ー 8 0 りりりなっ 0 っ 0 っ 0 っ 0 っ 0 っ 0 っ 0 ^ 0 0 00 4 adr newwin. tst List 3 ” config. h ” 1 : #include 2 : 3 : #define EXTN 4 : #de f i ne MYEXTERN 6 : #include く curses. h 〉 7 : 8 : main() 10 : WINDOW *mywin; 11 : initscr(); 12 : 13 : mywin = newwin(10,40, 5 , 1 の : 14 : 15 : mvwaddstr(mywin, 10 / 2 , 40 / 2 , " He110 World ” ) ; 16 : wrefresh(mywin) ; getch() ; 20 : 21 : endwin() ; 22 : 23 : exit( の ; 24 : 26 : printw. C List 4 Copyright 1990 & Toyokuni 3 : #include ” config. h ” 4 : 5 : #define MYEXTERN extern 6 : 7 : #include く stdiO. h> 8 : #include く string. h> 9 : 10 : #include ” curses. h ” 11 : 12 : #ifdef PROTOTYPE 13 : #include ” cboxprot. h ” 14 : #endif 16 : printw(unsigned char strC]) 17 : ( 18 : uns CX 19 : uns CY : 20 : int *adr adr = (int *)&str; 21 : 22 : CX = stdscr—>curx 23 : cy : stdscr->cury ; mvvfmtpr (stdscr, cy, cx. str, adr) : 24 : return( の ; 25 : Nu 第「 W01900922 り
主要コンバイラガイダンス バイラ 8 機種のインストールからプログラミング上の注意点 , C 、 LSI C ー 86 , High C 386 , TOWNS gcc, udjgpp,€主要コン 本バートでは , MS-C 、 Turbo C 十十 , BorIand C 十十 , Lattice 特徴などを機種別に紹介する。 MSTC Ver. 6.00a 篁雅之 48 C MAGAZINE 1991 12 まったく気にしなければ , 増設 RAM もマウ 要求されているが , もちろん , 使い勝手を されている。かなりリッチなハード環境が のキャッシュディスクおよびマウスが推奨 er. 4.0 対応の EMS メモリ , IM バイト以上 MS-DOS の場合 , IM バイト以上の LIM V 使用すると最大 20M バイト ハードディスク最低で 6M バイト ,PWB も メモリ IM バイト以上 ( OS / 2 ) メモリ : 640K バイト以上 (MS-DOS), 空き Ver. 1 . IA 以上 OS : MS-DOS Ver. 3.1 以上もしくは OS / 2 システムとインストール r. 6.0 研究」を参照のこと ) 。 0 の詳細は本誌 ' 90 年 12 月号特集「 MS ー C Ve 下にその特徴を簡単に見る ( MS ー C Ver. 6. 目度の高いコンパイラのひとって、ある。以 n 6.0 气以下 MS ー C Ver. 6.0 ) 。もっとも注 Professi onal DeveI opment System Versi 0 MS-C Ver. 6.0 の正式名は "Microsoft C ードディスクもない環境て、あっても 使用はて、きるが , あまり現実的てはないだ MS-CVer. 6.0 は 2HD フロッヒ。ーディス ク 8 枚て、供給される。フロッピーディスクに 入っているファイルは圧縮されている。付 属の setup. exe を使ってインストールする。 昔のバージョンのような自由度が減った分 , set 叩 . exe はよくて、きていて , ターゲットの OS やメモリモデルなどの項目についてキ ーか、、 Y / N 〃を入力していくだけて、 , 簡単 にインストールて、きる。また , 必要なディ スク容量を計算してチェックし , 足りない 場合はインストールせずに中止してくれる。 付属のマニュアルは , flnstall Guide 』 fProgramming Guide 』 「 Reference 』 の A5 判の 3 冊て、ある。 MS-C Ver. 6.0 には , 強力て、かっマニュアルより詳しいオンライ ンヘルプシステムがあるため , Ver. 5.1 の 8 冊ものマニュアルと比べるとずいぶんシェ イプアップしているが , 必要なことはもら さず書かれている。 flnstall Guide 』には , システムのイン ストール方法と使い方が説明されている。 マニュアル 明記されたとおりに作業を行えばインスト ールが完了し , PWB のおおよその使い方が わかるようになっている。 TProgramming Guide 』は効率的なプロ グラミング方法の解説 , fReference 』はコ ンパイラ , リンカ , 工デイタ , CodeView そ のほかのツールのコマンドを要約した解説 書て、 , ライプラリ関数の完全なリストもつ いている。 これらのマニュアルは , 見た目に印刷が きれいなだけて、なく , 構成がきちんとして いて , 適度に図を混じえながら , 要領よく , ・最初は何をすればよいか こは何についての章 / 節なのか この項目についてさらに知りたいとき にはどこを参照すればよいか などのポイントが注意深く書かれている。 誤字・誤植も筆者が見たかぎりて、は見当た らなかった。 Ver. 6.0 から搭載された主要な機能をあ 新しい開発環境 SourceBrowser 機能 MS-CodeView Ver. 3.0 開発・デバッグ げる。 プログラムメンテナンス機能の強化
特集 最新 C ・ C 十十コンバイラオーバピュー れば同じひとつの変数の宣言・定義とみな され , 重複工ラーは生じない。なお , MS- C Ver. 6 . 0 て、はデフォルトて、サポートされ ている機能て、ある。 このように , MS-CVer. 6.0 の持つ機能 をサポートし , さらにプラスを加えている 点に , BorIand 社の戦略的意図がはっきりと うかがえる。 BorIand C 十十は , Windows の普及に対しややあわてて出荷された観が あるが , それだけ , Windows アプリケーシ ョン作成用コンパイラとして , 多くのユー ザを MS - C から移行させようという意志を強 く感じる。 コンノヾイル方法 ( Makef ⅱ e ) lSt 1 : LIBPATH=c:*borIandc*Iib 2 : 3 : wintest. exe : wintest. Obj wintest. def wintest. res tlinkx /x/c/Tw /n /L$(LIBPATH) c0ws wintest, wintest' , \ 4 : CWins CS import, wintest 5 : 6 : rc wintest. res 8 : Wlntest. res : wintest. rc 9 : rc —r wintest. rc 10 : 11 : wintest. Obj : wintest. c bccx -WS —c wintest. c 12 : lSt 直ったバグ 1 ( a ) ソース struct ( int a, b; ) s, huge *P = &s; int i = p- 〉 b; (b) アセンプリコード int i = p->b; mov dx, word ptr [bp-6] mov ax, word ptr [bp-8] ← Turbo C + + ではこの行が抜ける。 xor CX, CX mov bx, 2 call near ptr N—PADD@ ;dx:ax + = cx:bx mov bx, ax mov es, dX mov ax, word ptr es: Cbx] mov word ptr [bp-10], ax Windows プログラミングーー TurboC 十十て、は無視されていた expor t 修飾子が , BorlandC 十十て、はきちんと機 能している。 Windows に工クスポートする 関数は , . DEF ファイルの EXPORTS のエン トリに記述する方法のほか , 関数宣言時に long FAR PASCAL export MyWinPro ; と記述て、きる。 -WE, ー WDE オプションを使用する場合 には , export を書かない far 関数は , 工クス ポート可能なコード処理をしないのて、 . DEF なお , BorIadC 十十て、は , リアルモード 最後に , 修正されたバグについて述べる。 ファイルの EXPORTS 工ントリに書いては の Windows のアプリケーションを組むこと 従来の TurboC 十十の C 十十モードて、は , h いけない がて、きない uge* インタて示す構造体やクラスのメンバ ところて、 , DS = SS を仮定て、きるメモリモ の計算て、内部関数を呼ぶときに , デル ( スモールデータモデル ) て、はスマート ノヾラメ タをひとつ初期化し忘れて , セグメントの コールバックという手法を用いることがて、 値がおかしくなるバグがあったが , Borlan きる。 米国て、は , GUI を提供するクラスライプラ d C 十十て、は修正されている (List 13 ) 。 ェクスポートされた関数は , 通常 , Wind 優れた統合開発環境とデバッガ , アセン リ ObjectWindows, Turbo Vision をパッケ OWS のモシューノレデータベースのコーノレサン ージした BorIand C 十十 &APPLICATION プラ , ツールを含めて , 価格は 98 , 000 円て、 クを介して間接的に呼び出されるが , スマ ある。広告て、もおなじみのように MS-C 十 S FRAMEWORKS が本年 9 月から出荷されて トコールバックを用いれば , コールサン クを必要とせず , 直接呼び出すことがて、き DK 十 MASM の 236, 000 円に比べて半値以下 て、 , 非常にコストノヾフォーマンスが高い。 る。これによって , メモリの使用量を減ら これらのライプラリを日本語化するのに なお , 学生向け割り引き ( スチューデント 時間がかかるて、あろうが , 日本語版のクラ し , 速度が向上する。 パック ) て、は , 20 , 000 円という破格の価格て、 スライプラリが発売されれば , 本格的に OO MakefiIe 例を List 12 に示す。この Make 購入て、きる。 file て、は wintest. c というソースプログラムを P の威力を発揮した C 十十プログラミングを 手軽に楽しめるようになりそうだ。 コンノヾイルするようになっている。 期待されるクラスライプラリ の拡充 特集最新 C ・ C 十十コンバイラオーバビュー 55
・ D 合開発環境を実現 ソフトの道具箱 通常のアプリケーション・プログラムへの組み込みに対するロイヤリティーは一切不要 ロ組み込みロイヤリティー 無料 への移植作業はこ自身の手で容易に実行可能 きわめて移植性の高いコードなので , コンバイラのバージョン・アップへの対応や , 異なるコンノヾイラ ロライプラリ関数のソースコードーーー完全公開 他機種の開発かすべて PC -9800 シリーズで OK / C/Window * 印は近日対応予定。 C/BCD C/Dbase C/Graph C/Print ISAM ファイルのキー値としてそのまま使用可能。 能。また , BCD 型データは C / Dbase にてサポートされる だが , double への型変換を行えば科学技術計算も可 実現するための関数ライプラリ。サポー N よ四則演算のみ お金の計算のように高い演算精度が要求さオ処理を 植可能。 れたアプリケーションはそのままソースコード・レベルで移 ートされているので , あらかじめ排他制御を考慮に作成さ 排他制御を行う関数は , MS ー DOS 版にも疑似的にサポ レコードの排他制御およびファイルの排他制御は完璧。 ■ OS / 2 , LJN Ⅸ版はマルチ・プロセス対応 なデータ・べース ( SQL , カード型等 ) の構築が可能。 の構築に最適。 Data 関数およこ Btree 関数は汎用的 別。 ISAM 関数は一般的な定型業務用データ・べース ISAM 関数 , Data 関数 , Btree 関数の 3 グループに大 的データ・べース構築用関数ライプラリ。提供関数群は 検索ロジックに正当な B tree アルゴリズムを採用 , 本格 13 種類の多彩なグラフをサポート。 ■多彩なグラフ種類 フごとに可能。 より , キャンバスの枠 , 背景色などきめ細かい変更がグラ メント , ラベル , 凡例 ) の属性の既定値を変更することに 単に作成可能。また , 各図表要素 ( キャンバス軸 , セグ 1 つあるいは複数のデータ系列から 13 種類の図表を簡 常駐させるので , プログラムの変更なしに異機種パソコ プリンタの機種依存部分はすべて BIOS としてシステムに ・異機種パソコン / プリンタに対応 タでもべージプリンタ感覚でレイアウト可能。 ックス印字ツール , C / W ⅲ dow と完全連動。ラインプノン 仮想べージ・プリンタ方式を採用したテキスト十グラフィ のまま異機種で動作可能。 PC ー 9801 で開発されたアプリケーション・プログラムがそ ■異機種の画面制御方式の相違をすべて吸収 が容易に実現可能。 ラフィックスもサポートしているので , きめ細かな画面設計 チウインドウ・アプリケーション開発用関数ライプラリ。グ 仮想画面いナポートした本格的なオーバーラッフ型マル ・仮想画面の概念を導入 巨大な仮想画面が設定可能。仮想画面内に表示しご 文字 , グラフィックは任意部分をビューに投影。 ・多彩なウインドウ操作 拡大縮小 , 移動 , 表示 ON/OFF, 枠タイトル , 色 , タイ ルバターン , 重なり順序の変更。 ■強力なテキスト操作処理 低レベルな入出力から高機能なスクリーンエディットまで ・価格 : Y33 , 000 ( 本体価格 Y32 , 039 ) 図形表示 , 塗りつぶし全面 / 部分画面コピーをサポ ■豊富なグラフィック処理機能 種々の文字サイズ , 文字属性 , 網掛けをサポート。 ■テキスト装飾機能 ン / プリンタで出力が可能。 ーメモリ効率のよいグラフィック管理 サポート。 sprintf ( ) のよ手軽さで BCD 型のデータを編集可能。 ・豊富な編集機能 ルのキー値としてそのまま使用可能。 BCD 型データは C / Dbase でサポートさオ ISAM ファイ 用可能 ・ BCD 型テータは旧 AM ファイルの←値に使 すべて C 言語で記述 , 異 OS への移植が容易。 ー異 OS への移植が簡単 応 OS / 対応言語 : MS-DOS(Ver. 3.0 以上 ), Y95 , 146 ) , 対応機種 : 一般の MS-DOS マシン , 対 ・ MS ー DOS 版・・・価格 : Y98 , 000 ( 本体価格 データ量が多くなるほど , 威力を発揮。 ・高速な検索スピード リテイだけでなく関数としても提供。 ファイルの整合性検証およびに修復の機能はユーティ ■充実したファイルの破壊対策機能 存在するので , 必要に応じて復旧可能。 削除レコードはファイルのパージを行うまでファイル内に ■削除レコードの復旧機能 スも可能。 キー値によるアクセスに加えて , レコード番号によるアクセ ー豊富な検索機能 ー 2 8 6 / 2 8 6 L , F M ー R 5 0 * / 6 0 * / 7 0 * , J ー ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , PC ・価格 : Y33 , 000 ( 本体価格¥ 32 , 039 ) の太さ , 色等をサポート。 多彩な枠・線・マーカ形状 , 文字サイズ , 背景模様 , 線 ・多彩な図表要素 更により , きめ細かいグラフ作成が容易。 キャンバス , セグメント , ラベル , 凡例の各構成要素の変 ■きめ細かい変更か可能 ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , PC ・価格 : Y66 , 000 ( 本体価格 Y64 , 078 ) ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , pc ー 2 8 6 / 2 8 6 L , F M ー R 5 0 / 6 0 / 7 0 , J ー 3100(Dynabook) シリーズ , AX パソコン , DOS/V パソ コン ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C (Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ー 2 8 6 / 2 8 6 L , F M ー R 5 0 * / 6 0 * / 7 0 * , J ー 3100(Dynabook) シリーズ * , AX パソコン * , DOS/V パ ソコン * ・対応プリンタ : PC-PR201 系 , ESC-P 系 * ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) 3100(Dynabook) シリーズ * , AX パソコン * , DOS/V パ ソコン * ※ C/Window(Ver. 2.0 以上 ) が動作可能な機種 ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo C ( Ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) D O S / V , M S ー C ( V e r. 5 . 1 以上 ) , Q u i c k c ( Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ・ MS-Windows 版 * ・・・価格 : Y168 , 000 ( 本体価格 Y163 , 107 ) , 対応機種 : 一般の MS-Windows マシ ン , 対応 OS / 対応言語 : MS-Windows,MS-C ( Ver. 5.1 以上 ) ・ OS / 2 版 * ・・・価格 : Y168 , 000 ( 本体価格 Ⅵ 63 , 107 ) , 対応機種 : 一般の OS / 2 マシン , 対応 OS / 対応言語 : OS/2, MS-C(Ver. 5.1 以上 ) ・ UNIX 版・・・価格は応談 , 対応機種 : 一般の UNIX マシン , 対応 OS / 対応言語 : UNIX, 標準の ・価格 : ¥ 33 , 000 ( 本体価格 Y32 , 039 ) ・対応機種 : 一般の MS ー DOS マシン ( 他の OS でも c 言語ならば対応 ) ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ※上記機種以外のパソコンへの移植も以下の条件にてこ・相談に応じます・・・・・・作業期間 = 4 ~ 8 週間 , 受注価格 = 応談 , 受注条件 = 作業期間中パソコン貸与 MS-DOS. MS-Windows. MS-C. Quick C は米国 Microso 升社の商標です。 Tu 市 0 C は米国 Borland lnternational 社の商標です 0Lattice C は米国 La ice 社の商標です。 UN Ⅸは米国 AT & T 社の商標です。 ーお問い合わせ・こ注文は直接当社まで AQLFT 盟 " ツールクラフト 〒 182 東京都調布市国領町 2 ー 3 ー 15 センチュリ—K & A 1 102 号 TEL. 0424 ( 89 ) 0202 FAX. 0424 ( 89 ) 4888 く資料請求番号 1 乃〉
特集 最新 C ・ C 十十コンバイラオーバビュー PC ー 9801 専用の pc98 関数は , PC ー 9801 の B IOS を直接呼び出す関数群て、 , マウスや RS ー 232C などの直接制御をサポートしている。 ただ , 使用にあたっては , PC ー 9801 専用て、あ ることを考慮する必要がある。 ほかに , 大規模なプログラムのサンプル としておなじみの表計算 MicroCalc が付属し ている。 この Turbo C 十十は , C 十十としても C 言 語としても使え , 非常に整備された統合環 境を持っている。今まて℃言語プログラムを 組んて、いて , これから C 十十プログラミング も始めようかという人にとっては最適な処 理系て、あろう。 これだけの機能を有したコンパイラが 20 , 000 円 ( スチューデントパックて、は 10 , 000 円 ) て、手に入るというのはコストパフォーマン スが非常に高いといえる。だが , EMS かプ ロテクトメモリはぜひほしいということを 最後に付け加えておく。 ① BorIand C 十十 Getting Started ⑥ BorIand C 十十 Quick Reference BorIand C 十十 V 2.0 トメモリが数 M バイトある環境が望ましい 上必要となる。 80386 以上の CPU て、プロテク indows 用のプロテクトメモリが IM バイト以 indows を同時に動作させるには , さらに W クトメモリが IM バイト以上必要となる OW クトモード版を動作させたいならばプロテ EMS メモリを IM バイト以上 , また , プロテ 以上だが , 軽快なコンパイルを望むならば 実行時に必要なメモリ容量は 640K バイト ールプログラムを起動してインストールす dows を立ち上げてから RWS 専用のインスト って容易に行える。 RWS については , Win インストール作業はⅲ sta Ⅱプログラムによ マニュアル 以下にあげる 12 冊のマニュアルが付属し 必要て、ある。 fGetting Started 』て、は , C 言語入門のペ ージが削除され , MS ー C とのコンパチビリ テイや MS ー C からの移行法が書かれてい る。コマンドラインて、指定するスイッチ の対応表が載っているのは非常にわかり やすい 『 Programmer' s Guide 』には , 付属のコ ンテナ系クラスライプラリの説明が加筆 されている。 Windows ライプラリについ ては , 印刷されたマニュアルはなく , オ ンラインマニュアルて、しかない このほか , 使用上の注意をまとめた REA DME, 基本的な Q & A をまとめた HELPM E!. DOC など , ファイルの形のドキュメン ト類があるのて、 , 必す一度は目を通して おきたい 全体的にマニュアルは非常によくて、きて おり , BorIandC 十十を使いこなすためによ ⅱノし ことはないだろう。惜しむ 佐藤隆 インストール ハードディスクに 20M バイトの空き容量が ムも含めたすべてをインストールするには , ク 8 枚て、供給され , RWS やサンプルプログラ Borland C 十十は 2HD フロッピーディス がノヾッケージされている。 ber Ver. 2.51 , Turbo ProfiIer Ver. 1 . 11 Debugger for Windows や , Turbo Assem ている。また , Windows に対応した Turbo S ) や Windows ライプラリがパッケージされ きるように , リソースワークショップ (RW に発展させ , Windows70 ログラムも開発て、 Borland C 十十は , Turbo C 十十をさら ている。 ② BorIand C 十十 User' s Guide 01.1 0L2 ⑤ Borland C 十十 Library Reference V ④ Borland C 十十 Library Reference V ③ Borland C 十十 Programmer' s Guide されている。 いては , 「 Getting Started 』て、簡単に説明 について解説されている。 BCINST につ 法 , コンパイル済みへッダの使用法など グ , DLL (DynamicLink Library) の作成 れ , 代わりに Windows のプログラミン グラム BCIN ST に関する記述が削除さ fUser'sGuide 』は , カスタマイズプロ @Turbo Language HeIp CompiIer OTurbo Assemb ler Quick Reference ⑩ Turbo Assembler User' s Guide ⑨ Turbo Profi 1 er User' s Guide ⑧ Turbo Debugger User' s Gui de ⑦ Resource Workshop User' s Guide らくは , Windows 関数についてのマニュア ルがオンライン形式のものしかないことて、 ある。 統合開発環境 (IDE ) 従来の IDE と大きく変わった点は , 工ディ タの Undo が強化されたことて、ある。これま て、 , 行の削除をひとつ復帰て、きる程度て、あ ったが , 新しい IDE て、は , 前にセープしたと ころまて、テキストの変更を順次取り消して 戻ることがて、きる。それにともない , Undo の取り消し ( Redo ) もメニューに付け加わっ 、 0 統合環境は非常に優れているが , 唯一気 になるのは , IDE と RWS との間にユーザイ ンタフェイスの、、縫い目〃が目立っことて、 ある。 本来独立した完成度の高いプログラムだ ったから仕方ないのだが , おそらく近い将 来に出るてあろう BorIand C 十十 for Win dows ( 仮称 ) ては , Windows 上て、走る統合環 53 最新 C ・ C 十十コンバイラオーバビュー 境となり , RWS との整合性も向上するもの 特集