Open Watcom C/C++ 1.7開発環境へようこそ。Open Watcom C/C++は、従来Sybase、Powersoft、そしてオリジナル版としてWATCOM International Corpより発売されていた商用コンパイラに取って代わる、オープンソースの製品です。
Open Watcom C/C++のバージョン1.7は、プロフェッショナルの最適化されたマルチプラットフォーム対応CおよびC++コンパイラと各種開発ツールを統合した環境です。これを使えば、DOS用の16ビットおよび32ビットアプリケーション、Novell NLMs、16ビットOS/2、32ビットOS/2、Windows 3.x、Windows 95/98/Me、Win32s、そしてWindows NT/2000/XP(Win32)の各種環境における開発とデバッグが行えます。
新しいプログラムと以前の製品に対して加えられた修正についての情報を含むため、本文書全体に目を通してください。
以前のバージョンを利用している方への注意事項!
アプリケーションを再コンパイルする場合は、リリースノートの項を参照してください。
バージョン1.7にはプロの開発者が要求する様々な機能が組み込まれています。
統合開発環境(IDE)では、DOSやOS/2 1.x、Windows 3.xのような16ビット環境や、拡張DOS、Novell NLMs、OS/2、Windows 3.x(Win32s)、Windows 95/98/Me、そしてWindows NT/2000/XPといった32ビット環境に対して、簡単に編集、コンパイル、リンク、デバッグ、ビルドといった作業を行うことを可能とします。プロジェクトは、EXEやDLLを含む多彩な環境に対した構造にできます。IDEはプロジェクトに対して、テキストエディタで閲覧および編集の出来るmakefileを作成します。このIDEは、Windows 3.x、Windows95/98/Me、Windows NT/2000/XP、そして32ビットOS/2環境にて提供されます。
ホスト環境
ターゲット環境(16ビット)
ターゲット環境(32ビット)
パッケージ内の主要なツールは、クロスプラットフォーム開発を可能とします。それは、開発者にとって、Windows 95/98/MeやWindows NT/2000/XP、そしてOS/2といった、今日の主要な32ビットオペレーティングシステムにおける優れた各種機能を利用できることを意味します。クロスプラットフォームは、ホスト側の開発環境において、異なるターゲット環境に向けた開発を行うことを可能とします。
新しいデバッガは、開発者の生産性を向上させます。新しい機能には、再デザインされたインターフェイス、入り組んだ(ネストした)ファンクションコール内にブレークポイントを設定すること、改善されたC++とDLLのデバッギング、実行ファイルの解読、そして変更可能なインターフェイスが含まれています。Windows 3.x、Windows 95/98/Me、Windows NT/2000/XP、32ビットOS/2では、グラフィカルなデバッガが用意されています。コマンドラインのデバッガは、DOS、Windows 3.x、Windows NT/2000/XP、そして32ビットOS/2にて利用できます。VIDEO愛好者のため、我々はオリジナルデバッガとコマンドラインでの互換性を持たせました。
ブラウザは、視覚的にC/C++アプリケーションにおけるオブジェクトの階層や機能、変数の型、定数を表現できます。
Open Watcom Execution SamplerとOpen Watcom Execution Profilerは、パフォーマンスを分析するためのツールです。これらは、コード内で頻繁に呼び出される箇所を抽出できるため、そこに開発を集中し、アプリケーションのパフォーマンスを改善することができます。
Open Watcom Editorは、構文解析機能を持つソースエディタです。このエディタはWindows 3.x、Windows 95/98/Me、Windows NT/2000/XPのIDEにて提供されます。
Open Watcom C/C++は、グラフィカルな開発ツール群を提供します。これらは、Windows 3.x、Windows 95/98/Me、Windows NT/2000/XPアプリケーションの開発を支援します。開発ツールは、以下の機能を提供します。
このパッケージには、アセンブラが含まれています。これは、マイクロソフトのマクロアセンブラ(MASM)のサブセットと互換性があります。
Open Watcom C/C++は、コンテナとストリームクラスライブラリを含んでいます。
Open Watcom C/C++は、Tenberry SoftwareのDOS/4GW 32ビットDOSエクステンダを同梱しています。このランタイムは無償で利用でき、最大32Mバイトの仮想メモリをサポートします。
Open Watcom C/C++では、以下のDOSエクステンダ機能を使ったアプリケーション開発とデバッグを行えます。主要なDOSエクステンダ、Tenberry SoftwareのDOS/4GとPhar Lap's TNT DOSエクステンダです。さらにまた、DOS/32AやFlashTek製DOSエクステンダを利用したアプリケーション開発も行えますが、現在、これらのアプリケーションについてのデバッギングについてはサポート外となっています。
Open Watcom C/C++には、開発環境を紹介するためのたくさんのサンプルアプリケーションが同梱されています。
私たちは、我々の製品が設計されたとおりに確実に動作するよう、取り組んでいます。しかしながら、膨大なテストをくぐりぬけてきた本製品においても、ソフトウェアやドキュメントの問題にぶつかるかもしれません。テクニカルサポートは非公式ながらOpen Watcom C/C++ニュースグループを中心に用意されています。詳細については、http://www.openwatcom.org/を参照してください。
Open Watcom C/C++は疑問を解決するための豊富なリソースを含んでいます。文書は、始めるための最初の一歩です。製品の各リリースでは、よくある質問に答えるためにマニュアルを更新しています。この情報の大部分はまた、オンラインヘルプを通して参照することもできます。
製品導入先ディレクトリに存在する”README”ファイルには、製品出荷直前の最新情報が記載されています。
良くある質問への回答は、Open Watcomワールドワイドウェブサーバ、http://www.openwatcom.org/に記載されています。
テクニカルサポートは、ソフトウェア上の技術的な欠陥を解決する助けとなるために提供されます。すべてのサポートは現在、非公式かつ無償で提供されることに注意してください。以下に、テクニカルサポートと連絡を取る方法を示します。
問題を早く解決するために、より多くの情報をテクニカルサポートへ提出することができます。必須のものは、問題の詳細について、短いサンプルプログラム、問題を再現するための概略手順(コンパイラやリンカのオプションを含む)です。簡潔な問題報告は、テクニカルサポートが素早く問題点を見つけ、解答を提供する助けとなります。ここに、テクニカルサポートが問題を解決するのに役立つ情報を列挙します。
あなたの質問への解答を手助けする、いくつかの良書や文献があります。以下は、役立つと思われるいくつかの書籍や文献の一覧です。これは、完全な一覧というわけではありません。より多くの情報については、近所の書店に問い合わせてください。
本パッケージは、以下の内容を含んでいます。
Open Watcom C/C++は、最小環境として以下の構成を必要とします。
以上の条件に加えて、以下のどれかのOSが必要となります。
Open Watcom C/C++を導入する前に、CD-ROMのルートディレクトリに格納されている”README”ファイルを読むべきです。そこには有益な、本製品に関する最新情報が記載されています。
本バージョンにおける導入プログラムは、いくつかの新しい”気の利いた”機能とともに、すべて再構成されています。以前のバージョンのOpen Watcom C/C++を導入しているならば、Open Watcom C/C++ 1.7を同じパスに導入すべきです(以下に示す内容に該当する場合を除く)。それは以前の導入状況を検証し、以前にどの機能が導入されていたかを調べます。そして、この情報を新しく導入しようとしている製品の標準設定に反映しようとします。もちろん、導入の過程において、機能の追加や削除を行うこともできます。
もし、Open Watcom C/C++またはOpen Watcom FORTRAN 77の製品群のどちらか片方の製品を導入しようとしており、もう片方の製品の旧バージョンをすでに導入しているのであれば、新しい製品を古い製品と同じディレクトリに導入することは推奨しません。Open Watcom C/C++とOpen Watcom FORTRAN 77は、同一バージョンのものと互換性があります。しかしながら、Open Watcom C/C++とOpen Watcom FORTRAN 77はしばしば、異なるバージョンのものとは非互換となっています。このような状況においては、二つの製品を使い分けるときの計画をしっかりと立てるように注意してください。PATHやWATCOMといった環境変数は、正しく構成されている必要があります。CONFIG.SYSやSYSTEM.INIといったシステムファイルは、正しく構成されている必要があります。
Open Watcom C/C++ 1.7とOpen Watcom FORTRAN 77 1.7の両方を導入しようとする場合、双方の製品を同一ディレクトリに導入することを推奨します。これは、ファイルが重複することを避け、結果として必要となる総合ディスク容量を減らすことにつながります。二つの製品は、導入先ディレクトリを表すいくつかの環境変数を共用します。もし、導入先ディレクトリを異なるものにすると、問題が発生することがあります。
Open Watcom C/C++ 1.7とOpen Watcom FORTRAN 77 1.7を同一ディレクトリに導入する場合、後から導入する製品に対してどのオプションも選択を外すべきではありません。さもないと、後から導入する製品は、すでに導入されている(そして必要とされている))ファイルを削除してしまうかもしれません。これは、Open Watcom C/C++かOpen Watcom FORTRAN 77のどちらかだけを持っている場合には無用の問題です。この問題は、Open Watcom C/C++とOpen Watcom FORTRAN 77がお互いに、それぞれの製品導入時のオプションを取得できないために起こることです。
以前のバージョンのバックアップを取得したい場合は、Open Watcom C/C++ 1.7の導入前に行ってください。
Open Watcom C/C++ 1.7を、以前のバージョンと異なるディレクトリに導入する場合、導入作業が完了した後にシステムファイル(例:CONFIG.SYS、AUTOEXEC.BAT、SYSTEM.INI)を手動で編集しなければなりません。これは、旧バージョンの環境変数(例:PATH、DEVICE=)を削除するために必要なことです。旧バージョンへのパスより後に新バージョンへのパスが出てくるようになるまで、作業を続けてください。この余計な作業を避けるために、新バージョンを旧バージョンと同一パスへ導入することを推奨します。
以下の例では、いくつかの環境変数と”RUN”文をOS/2のCONFIGY.SYSファイルに修正/追加した様子を示します。旧バージョンのソフトウェアへの参照は、すべて削除されたことを確認してください。
例:
LIBPATH=...;D:\WATCOM\BINP\DLL;...
SET PATH=...;D:\WATCOM\BINP;D:\WATCOM\BINW;...
SET HELP=...;D:\WATCOM\BINP\HELP:...
SET BOOKSHELF=...;D:\WATCOM\BINP\HELP;...
SET INCLUDE=...;D:\WATCOM\H\OS2;D:\WATCOM\H;
SET WATCOM=D:\WATCOM
SET EDPATH=D:\WATCOM\EDDAT
RUN=D*\WATCOM\BINP\NMPBIND.EXE
Open Watcom C/C++を、同じPC上の複数のOSで利用したい場合があるかもしれません。この場合はすべての利用したいOS上で、同じ導入手順を踏んでください。
Windows 3.xで導入を行う場合は、DOS上で導入を行う必要はありません。
OS/2上のWin-OS/2を開発環境に利用しようとする場合、Windows 3.1の導入プログラムを利用しなければなりません(ホストサポートでWindows 3.1を選択してください)。
CD-ROMドライブにCD-ROMのメディアを挿入してください。現在使用しているOSに従って、下記のどれかの手順を実行します。以下では、CD-ROMドライブを”x:”として表します。
x:\setup
x:\setup
x:\setup
x:\setup
x:\install
Open Watcom C/C++を導入後、最初の導入時に省いた機能を導入したくなる場合があります。また、不要な機能を削除したいと思う場合があるかもしれません。このような場合は、以下の方法に従ってください。
導入プログラムはOSの起動ファイルに、Open Watcom C/C++が動作するように修正を加えます。導入プログラムによってシステムの設定ファイルを構成することを強く推奨しますが、手動で編集を行うことも可能です。必要な変更点は、導入したルートディレクトリに作成される以下のファイルを参照してください。
Windows 3.xで統合開発環境(IDE)を使用する場合、IDEのバッチサーバプログラムがバックグラウンドで動作できるようにすることが重要です。そのために”コントロールパネル”の”386エンハンスド”にある”スケジューリング”で、、”フォアグラウンドでは排他的に実行する”チェックボックスをチェックしないようにしてください。
Windows 3.xでIDEを使用する場合、”SYSTEM.INI”ファイル内の行、
OverlappedIO=ON
が問題を引き起こすことがあります。これはディスクIOのキューを制御(無効化)し、いくつかのプロセスが終了できるようにDOSボックス間のタイミングに変更を加えます。
Windows 3.xでIDEを使う際、”SYSTEM.INI”ファイルに、
NoEMMDriver=ON
の行が入らないようにしてください。これは、IDE内でリンクする際の障害となります。
NEC PC-9800シリーズ上のWindows 3.xでIDEを使用する場合、”SYSTEM.INI”ファイル内に、
InDOSPolling=TRUE
の行が入らないようにしてください。これは、IDE内でmakeする際の障害となります。
Central Point Software社のウィルス対策ソフト(VDEFEND、VSAFE、VWATCH)は、Windows 3.x環境下でIDEと競合を起こします。
プログラムの情報ファイル”BATCHBOX.PIF”は、バックグラウンドでコンパイル、リンク、その他をを行うバッチサーバを起動するためにIDEによって使用されます。このPIFは、”COMMAND.COM”を参照します。もし、”4DOS.COM”のような”COMMAND.COM”互換環境を使用している場合は、それに応じてPIFエディタでPIFファイルを編集しなければなりません。
IDEは、テキストファイルの編集にIBM OS/2拡張エディタ(EPM)を使用します。このため、IDEの利用を検討しているなら、OS/2環境に確実にEPMが導入されているようにしてください。拡張エディタは、OS/2セットアップと導入プログラム(選択導入)を起動し、”ツールとゲーム”の詳細ページから”拡張エディタ”を選択することで導入できます。
OS/2のUNDELETE機能を利用する限られたメモリを持ついくつかの環境では、OS/2がコンパイラの一時ファイルのコピーを保存するため、コンパイル時間が遅くなることがあります。DELDIRを無効にするとともに、OS/2のSTARTUP.CMDでBATSERVプロセスを起動すると良いでしょう。以下に例を示します。
SET OLD_DEL_DIR=%DELDIR%
SET DELDIR=
DETACH C:\WATCOM\BINP\BATSERV.EXE
SET DELDIR=%OLD_DEL_DIR%
SET OLD_DEL_DIR=
Open Watcomのデバッガで名前付きパイプリモートデバッギング機能の利用を検討している場合、NMPSERV.EXEプログラムが実行されていなければなりません。これは、OS/2の初期化が行われている最中に、CONFIG.SYSファイルの”RUN=”命令によって起動されるか、DETACHコマンドによって手動で起動する必要があります。
それでは、Open Watcom C/C++の使用を開始して、その機能のいくつかを紹介していきましょう。この章の目的は、実際のアプリケーションを使用しながら簡単にOpen Watcom C/C++の新しいグラフィカルツールを試すことです。
このチュートリアルでは、実際のC++ソースファイルを取り上げ、IDEでプロジェクトを作成し、以下の項目を実施します。
Open Watcomの統合開発環境(IDE)は、プロジェクトの開発を行う際にプログラマーが使うファイルやツールを管理します。これは、ソースファイル、インクルードファイル、ライブラリ、(複数の)コンパイラ、リンカ、プリプロセッサ等、ユーザが使うすべてのものを含みます。
IDEはグラフィカルインターフェイスを持ち、プロジェクトの構成をわかりやすく視覚化します。一つのIDEセッションは、一つのプロジェクトを示します。もしプロジェクトがいくつかの項目、たとえば二つの実行ファイルと一つのライブラリから構成されていたら、これらの項目はおのおのがプロジェクトウィンドウ内のターゲットウィンドウに表示されます。それぞれのターゲットウィンドウは、ターゲットを構成するのに必要なファイルを表示します。そして、ファイルの拡張子を通して生成方法を記述した規則と結びついています。たとえば、”.EXE”拡張子を持つファイルは、32ビットWindowsの実行ファイルを生成する規則と結びついています。また、”.LIB”拡張子を持つファイルは、静的ライブラリを生成する規則と結びついていることでしょう。異なるプロジェクトに、同じターゲットを参照させることも可能です。この場合、そのターゲットは共有され両方のプロジェクトから変更を加えることができ、片方のプロジェクトからの変更はもう一方にも影響を与えます。
IDEそれ自身は複数のプログラムからなり、ターゲットのライブラリや実行ファイルを生成する様々なファイルやツールの管理を行います。それは、ターゲットの記述内にある情報から(複数の)makefileを作成し、ターゲットそれ自身を生成するためにOpen Watcom Makeを起動します。設定ファイルには、Open Watcomコンパイラ、エディタ、プロファイラ、ブラウザについての情報が、それらすべてのオプションスイッチと同様に含まれています。チュートリアルの最後では、台所の立体図を作成します。これは、メニューまたはツールバーのアイコンから操作することができます。立体図は回転や大きさの変更ができるほか、光の方向やコントラストの調整も行えます。
このチュートリアルは、Windows上でC/C++プログラムを作成し、実行するまでを案内します。これにより、IDEの基本的な概念とをの構成を理解することができるでしょう。そしてまた、プロジェクト開発を含んだ手順の詳細を知ることができます。
チュ-トリアルを開始するには、IDEを起動してください。Open Watcom C/C++ウィンドウから”IDE”をダブルクリックすることにより、起動できます。
IDEウィンドウの一番下に表示されるステータス域には、ツールバー上のアイコンのうち、マウスカーソルが指し示しているものの機能が表示されます。もし、ステータス域にマウスカーソルが示したアイコンの機能が表示されない場合は、メニューバーがハイライト表示されていないか確認してください(もしハイライト表示されていたら、Altキーを押してください)。
Figure 1. IDEの初期画面(訳注:OS/2版)
このチュートリアルでは、KITCHEN(台所)と呼ばれる新しいプロジェクトを作成します。ここに、この作業を完成させる手順を示します。
[File]メニューを開き、[New Project...]の項目を選択して新しいプロジェクトを定義します。または、ツールバー上の”Create a new project”アイコンをクリックすることでも、新しいプロジェクトを定義できます。
新規プロジェクトとは異なるサンプルプロジェクトのディレクトリが選ばれ、利用できます。Open Watcom C/C++を\WATCOMディレクトリに導入したと仮定すると、サンプルプロジェクトのディレクトリは以下のようになります。
\WATCOM\SAMPLES\IDE
このチュートリアルの目的のためには、以下のプロジェクトディレクトリの中から一つを選択することを推奨します。
このように、上で示したターゲットは、選択によってWIN、WIN386、WIN32、またはOS/2のどれか一つになります。チュートリアルでは、実例のためにWIN32を例として使用します。
プロジェクト名を聞かれたら、以下の二つのうちのどちらかを行ってください。
以下のパス名を入力します。
[path]\SAMPLES\IDE\target\KITCHEN
[path]は、Open Watcomを導入したドライブとパスを表します。
ファイルブラウザから以下のディレクトリを選択します。
[path]\SAMPLES\IDE\target
そして、ファイル名としてkitchenを指定してください。
Figure 2. 新規プロジェクトの作成(訳注:OS/2版)
Enterキーを押すか、OK(OPEN)ボタンをクリックします。
プロジェクトの内容は、このファイルに保存されます。そしてIDEはこのセッションの間、現在の作業ディレクトリを指定されたパスに設定します。
ターゲット名を入力するように求められます。ここでは定義済みのターゲットを追加するのですから、単にBrowseボタンをクリックしてください。続いて”draw”ターゲットファイルを選択します(これは選択したターゲットに従って、draw16.tgt、draw.tgt、draw32.tgt、drawos2.tgtのいずれかになります)。
Figure 3. 既存ターゲットの追加(訳注:OS/2版)
Enterキーを押すか、OK(OPEN)ボタンをクリックします。
ターゲットの定義がすでに存在しているのであれば(すでに作成されているのであれば)、ターゲット環境とイメージタイプの設定については無視することができます。この設定は、新しいターゲットを定義する際に重要となります(すなわち、定義済みのものがない場合)。
Figure 4. ターゲットタイプの選択(訳注:OS/2版)
Enterキーを押すか、OKボタンをクリックしてください。
プロジェクトウィンドウの中に、ターゲットウィンドウが”draw”ターゲットとして作成されます。このウィンドウには、ターゲットに関連したすべてのファイルが表示されています。”フォルダ”アイコンをクリックすることで、特定の拡張子を持つファイルすべてを非表示あるいは表示することができます。たとえば、.bmpの拡張子を持つすべてのファイルを非表示にしたければ、ビットマップに関連したフォルダアイコンをクリックします。
Open WatcomのIDEでは、すべてのプロジェクトに対して多様なターゲットを指定することが可能です。ターゲットは、多様なプロジェクトで使われることに注意してください。新しいターゲットをプロジェクトに追加するには、以下のようにしてください。
ターゲットウィンドウがプロジェクトウィンドウ内に、buttonターゲットとして作成されます。
Open WatcomのIDEは、プロジェクト内の各ターゲットをビルドまたは”make”するために必要な一連の手順を、自動的に作成します。プロジェクト内のターゲットは、個々にまたは一括でメイクされることに注意してください。button.libターゲットをメイクするには、以下の手順に従ってください。
IDEはこれで、ターゲットから得られる情報と生成ルールに基づきmakefileを生成します。そして、ターゲット(この場合はbutton.lib)を生成するためにメイクユーティリティを起動します。この操作の出力結果は、ログウィンドウに表示されます。
現在のプロジェクト上のすべてのターゲットをメイクするには、ツールバー上の”Make all targets in the project”アイコンをクリックします。あるターゲットが別のターゲットに依存している場合、後者のターゲットが先にメイクされます。このチュートリアルでは、button.libが先にメイクされます(先にメイクされることに関して、何もする必要はありません)。次に、draw???.exeがメイクされます。これは、button.libが、draw???.exeに関連づけられたファイルのリストの中に存在するからです。いずれの場合も、IDEはターゲットから得られる情報と生成ルールに基づきmakefileを生成します。この操作の出力結果は、ログウィンドウに表示されます。
Figure 5. 一つまたは複数のターゲットをメイクする(訳注:OS/2版))
Open Watcom C/C++ 1.7/1.8のOS/2版では、Makefileの生成にバグがあるようです。具体的にはリソースファイルの出力箇所が以下のようになっています(サンプルプロジェクトの場合)。
rc -i $[: -i C:\WATCOM\h -i C:\WATCOM\h\os2 -r ..\drawos2.rc drawos2.res
ここで、rc.exeはWin32用のリソースコンパイラの実行ファイルで、OS/2(およびWin3.x)ではwrc.exeを指定する必要があります。また、オプションの指定方法も修正する必要があります。具体的には、以下のいずれかに修正してください。
wrc -i=$[: -i=C:\WATCOM\h -i=C:\WATCOM\h\os2 -r ..\drawos2.rc -fo=drawos2.res
wrc -i=$[:;C:\WATCOM\h;C:\WATCOM\h\os2 -r ..\drawos2.rc -fo=drawos2.res
以上で、サンプルプロジェクトは正常にMake allできるはずです。
なお、本バグはOS/2上のOpen Watcom C/C++でOS/2のターゲットを作成するときに確認しました。同じくOS/2上でWin32用のターゲットを作成すると、Makefileは正しくwrc.exeを指定するので、修正の必要なくMake allできます。
なお、本件についてOpen WatcomのBugzillaへ報告を行ったところ、IBM製のrc.exeを導入すれば解決するというコメントをいただきました。しかしながら、上記の通りWin32アプリケーションのMakefileではwrc.exeを指定すること、パスの通ったディレクトリにwrc.exeが存在することから、訳者としてはOpen Watcomのバグだと思っています。
プロジェクトはエラーもなく、ビルドできたはずです。ここで、開発したプログラムを実行する用意ができました。
draw???.exeのターゲットウィンドウをクリックし、ツールバー上の”Run the current target”アイコンをクリックしてください。または、[Targets]メニューから[Run]を選択することでもこの作業を行うことができます。あるいはターゲットウィンドウの内部フレーム外で右クリックし、ポップアップメニューからRunを選択することもできます(右クリックは微妙な操作で、ポップアップメニューの内容はウィンドウ上の右クリックした箇所によって様々な結果が得られるでしょう)。
Figure 6. kitchenのデモ(訳注:OS/2上で作成し、Windows XP上で実行)
作成したデモは、台所の簡単な立体図です。ツールバー上のアイコンかメニューを使用することで、図を上下左右に回転できるほか、 明るさの調節、遠近表示、コントラストの上げ下げ(この機能は[Lighting]メニュー内にあります)が行えます。デモプログラムを終了する場合は、[File]メニューから[Exit]を選択してください。
IDEは編集しようとするファイルの形式を認識し、作業に適したエディタを起動します。ファイルを編集するには、ファイルをダブルクリックするかファイルを選択し、ツールバー上の”Edit”アイコンをクリックします。.c、.cpp、.h、.hpp、.for、.asm、そして.rcの拡張子を持つファイルはテキストエディタによって編集され、.bmp、.ico、.curの拡張子を持つファイルは画像エディタで編集されます。.dlgまたは.resの拡張子を持つファイルは、リソースエディタによって編集されます。
Figure 7. OS/2上のOpen Watcomエディタ(Future Wave Editorを使用)(訳注:Windows版ではOpen Watcom内蔵のエディタが起動する)
さて、これでソースファイルの一つが編集できるようになり、アプリケーションにエラーを埋め込むことができるようになりました。
プログラムをデバッグするには、まず最初にデバッグするための情報を得るためにプログラムをコンパイルしなければなりません。IDEはプロジェクト内の各ターゲットに対して、二つのセットのスイッチを持っています。これらは、開発スイッチとリリーススイッチとして知られています。
draw???.cを右クリックし、ポップアップメニューからSource optionsを選択します。サブメニューからC Compiler Switchesを選択してください
標準では、ターゲットはデバッギングスイッチが有効な状態の開発モードになっています。これは、コンパイラとリンカがデバッグ用の情報を含むようにするためです。スイッチは、おのおのの区分に大して手動で設定できるるほか、標準のリリーススイッチを[CopyRel]ボタンを使ってコピーすることができます。このスイッチ設定の方法は煩雑なスイッチ名を覚えておく必要がないため、特に、診断メッセージや最適化、コード生成スイッチから特定のリンカスイッチすべてを指定する際に、好都合です。固有の項目に対して適用したいスイッチに対して、単にnextをクリックすればよいのです。
[>>]ボタンを使い、以下の項目が表示されるまで区分をスクロールします。
6. Debugging Switches
コンパイル時に使用されるすべてのデバッギング情報が閲覧できます。ここで、[Cancel]をクリックしてこの画面を終了してください。
Figure 8. コンパイラスイッチの設定
デバッガを起動するには、[Targets]メニューをプルダウンし[Debug]を選択するか、ツールバー上の”Debug the current target”アイコンをクリックします。
Open Watcomのデバッガは、可能な限り使いやすく直感的に作られています。また、それと同時に重大なデバッギングを行うための総合的かつ、柔軟な環境を提供してます。最大限の生産性を得るため、必要な情報を正確に表示するように環境を構築することができます。ウィンドウから得られる内容は、ソース、アセンブラ言語、モジュール、関数、呼出、スレッド、イメージ、監視項目、ローカル、グローバル、ファイルの種類、レジスタ内容、80x87浮動小数点、スタック、I/Oポート、メモリ情報、そしてログウィンドウです。ソースは、キーあるいはツールバー上のアイコンを使うことでステップごとに実行することができます。呼出が終わるか呼出が行われる、あるいはまた現在の関数が終了するまで、一つの行をまとめて実行できます。マウスの右ボタンをクリックすることで、構文に応じたポップアップメニューが表示されます。
Figure 9. Open Watcomのデバッガ
今回の問題はdraw???.exeで発生していることがわかっているので、アプリケーションを実行してプログラムで問題が発生している状態を調査することにします。
ツールバー上の”go!”アイコンをクリックし、プログラムを実行します。例外が発生し、ソースウィンドウは以下の行を示します。
*pwidth = bitmap.bmWidth + 5;
button_size関数内の最後の行が、例外の前に実行されています。ローカルウィンドウを見ると、pwidthがNULLポインタを示しており、その結果例外を引き起こしていることがわかります。
ここで、ツールバー上の”Move up the call stack”アイコン(赤色の上向き矢印)をクリックすることで、コールスタックを上へ動かすことができます。これにより、プログラムの実行を追跡することができます。前の行では、button_sizeがadd_buttonより呼び出されているのが確認できます。再度コールスタックを上へ動かすと、add_buttonが五つ目のパラメータにNULLを持ったまま呼び出されていることが確認できます。チュートリアルのために、わざとエラーが組み込まれています。それは、ソースファイルを数行戻った箇所にあります。
ここでは#if 1を#if 0に書き換えることで、エラーを回避できます。#if 1の上で右クリックし、Showを選択します。続いてポップアップメニューからLine...を選択することで、修正すべき行番号を知ることができます。以上が済んだら、デバッガを終了してください。
draw???.cをダブルクリックし、ソースファイルをエディタで開きます。
キーボードまたはマウスを使って、227行目までスクロールしてください。または、[Edit]メニューをプルダウンし、[Goto Line...]を選択して227を入力します。
#if 1を#if 0に書き換えます。”Write the current file to disk”アイコンか、[File]メニューから[Save]を選ぶことで、変更を保存します。
IDEに戻ります(画面上に表示されていればそれをクリックしてください。そうでなければ、Alt+Tabを使用します)。そして、プロジェクトを再メイクします。
プロジェクトを実行し、kitchenのデモが実行されることを確認します。
サンプルアプリケーションの卓上の色を変更したい場合を想像してください。変更が必要なコードを調べるのに、Open Watcom Browserを利用することができます。Open Watcom Browserは、クラス定義やメンバー関数、C++のコードと結びついた継承ツリーの調査を行うのに、簡単な手段を提供します。最初に、コンパイラがOpen Watcom Browserの情報を出力するように指示する必要があります。
Figure 10. Open Watcom Browser
furnitu.cppを右クリックし、ポップアップメニューからSource optionsを選択します。続いて、C++ Compiler Switchesをサブメニューから選択します。
ドロップダウンリストボックスから選択するか、[>>]ボタンを使ってスクロールして、以下のカテゴリを表示します。
6. Debugging Switches
Emit Browser Information [-db]を選択し、OKをクリックします。
”Make all targets in the project”アイコンをクリックし、プロジェクトを再メイクします。コンパイラはfurnitu.cppのブラウザ情報を、draw???.dbrというファイルに出力します。これで、ターゲットソースを閲覧する用意ができました。
[Targets]メニューをプルダウンし[Browse]を選択します。または、ツールバー上の”Browse the current target”アイコンをクリックします。ターゲットの継承ツリーが表示されます。
個々のクラスの詳細、すなわちクラス定義の場所や、プライベート、パブリック、クラス内で保護された関数、クラスの継承といった情報を表示するには、項目上でダブルクリックします。継承ツリーの枝は、閉じたり開いたりすることができます。C++のソースを参照するために、様々な道具が利用できます。ここでは、tableクラスをダブルクリックしてください。
top_and_four_legs()関数をダブルクリックすると、関数の詳細が表示されます。
tabletop変数を選択し、[Detail]メニューをプルダウンします。[Goto Definition...]の項目を選択してください。エディターが起動し、top_and_four_legsの定義を含んだfurnitu.cppが読み込まれます。
次に、卓上の色を変えるためにfurnitu.cppへいくつかの変更を加えます。キーボードまたはマウスで143行目までスクロールするか、[Edit]メニューから[Goto Line...]を選択して143と入力してください。
行を書き換えます。
tabletop->rgb(0, 255, 255);
を、
tabletop->black();
とします。
”Write the current file to disk”アイコンをクリックするか、[File]メニューから[Save]を選択して変更を保存します。
プロジェクトを再メイクする前に、ソースブラウザを終了します。
IDEに戻ります(画面上に表示されていればクリックし、そうでなければAlt-Tabキーを利用します)。
”Make all targets in the projects”アイコンをクリックし、プロジェクトを再メイクします。
エラーはメイクの過程で発生し、(複数の)エラーメッセージはログウィンドウに出力されます。エラーについての追加情報はエラーを選択し、[Log]メニューをプルダウンして[Help on Message]の項目を選択してください。
以下のエラーメッセージをダブルクリックします。
furnitu.cpp (132): Error! E029: (col 15) symbol 'black' has not been declared.
問題が生じているソースファイル(furnitu.cpp)がエディタに読み込まれ、エラーの発生している箇所にカーソルが表示されます。どうやら、blackは色として定義されていないようです。
ソースブラウザを再起動します。
継承ウィンドウのcolorをダブルクリックし、メンバ関数のcolorクラスを参照します。選択肢は、blue()、green()、red()があることがわかります。
Alt-Tabキーを押してエディタに戻り、行、
tabletop->black();
を、以下に書き換えます。
tabletop->red();
変更を保存します。
IDEに戻り、プロジェクトを再メイクします。
プログラムを実行し、卓上の色に加えた変更を確認してください。
Open Watcomが提供するイメージエディタでは、プロジェクトと関連のあるビットマップ、アイコン、カーソルの編集ができます。IDE上で.bmp、.ico、.cur拡張子を持つファイルをダブルクリックすると、ファイルがイメージエディタに読み込まれます。このエディタは画像を編集するためのたくさんの機能を持っています。サイズ変更、回転、別の画像を”スナップショット”し、取り込むユーティリティといったものです。
Figure 11. Open Watcomのイメージエディタ(訳注:OS/2版はOS搭載のアイコンエディタが起動する)
サンプルプロジェクトで、右矢印アイコンの色を変えたいところを想定してください。
IDE上で.bmpの隣の”フォルダ”アイコンが閉じていたら、アイコンをクリックすることでファイルリストに.bmp拡張子のファイルすべてを表示できます。
right.bmpファイルが表示されるまで、ウィンドウをスクロールします。
draw???.exeのターゲットウィンドウ上で、right.bmpをダブルクリックします。
ツールパレットから”Paint Can”アイコンを選択します。
カラーパレットから、色を選択します。
矢印をクリックします。
ツールバーの”Save”アイコンをクリックして変更を保存後、イメージエディタを終了します。
”Make all targets in the project”アイコンをクリックし、変更を含んだプロジェクトを再ビルドします。
訳注:
OS/2版のサンプルプロジェクトでは、以下の機能は利用できませんでした。x:\watcom\binp内のOS/2用実行ファイルを確認した限り、本機能は搭載されていないように思えます。
次に、draw???.exeのターゲットウィンドウに、ソースファイルを追加します。
[Souces]メニューをプルダウンして、[New Source...]の項目を選択します。
注意:
この操作はメニューバーから選択するか、ファイルリストの表示箇所にマウスポインタを移動し右クリックすることでも行えます。IDEは、目的の操作を行うためのポップアップメニューを表示します。
ファイル名にdraw.res(OS/2ではdrawos2.res)を入力します。OS/2では、ソースファイル名の入力後にOKをクリックしてください。他のすべての環境では、ソースファイル名の入力後にAddをクリックし、ダイアログを閉じます。ここで、.resファイルへの変更が上書きされないように.rcファイルをプロジェクトから削除します。.rcファイルが存在すれば、.resファイルは.rcファイルから生成されます。
draw.rc(OS/2ではdrawos2.rc)を右クリックし、ポップアップメニューからRemove Sourceを選択します。
draw.res(OS/2ではdrawos2.res)をダブルクリックします。リソースエディタが起動し、存在するすべてのリソースが表示されます(この場合は、アイコン、ビットマップ、メニュー)。
Figure 12. Open Watcomリソースエディタ
”Menu Resources”をクリックします。
右手のボックスにある”DrawMenu”をダブルクリックすると、メニューエディタが立ち上がります。メニューエディタは、DrawMenuリソースで定義されているメニュー内容を表示します。ここではポップアップメニュー、メニュー項目とサブメニューの内容、テキスト、セパレータ、属性、ブレイクスタイル、メモリフラッグを確認できます。
Figure.13 Open Watcomメニューエディタ
アイテムリストウィンドウでMENUITEMの”&Dimmer”をクリックします。
”Item Text”ウィンドウで、内容を&Darkerに変更し、”Change”ボタンをクリックします。
[File]メニューから[Update]を選択するか、”Update the file with this menu”アイコンをクリックします。
メニューエディタを終了します。
[File]メニューから[Save]を選択するか、”Save this file”アイコンをクリックしてリソースエディタを終了します。
”Make all targets in the project”アイコンをクリックして、プロジェクトを再メイクします。
訳注:
OS/2版のサンプルプロジェクトにおいては、IDEからサンプラーを起動することができませんでした。サンプラーを使用するには、コマンドラインからwsample -f=出力ファイル(.smpファイル)名 -r=サンプリングレート 実行ファイルと入力してください。アプリケーションの実行後、カレントディレクトリ内に.smpファイルが生成されます。プロファイラはPMアプリケーションとして用意されているので、その後.smpファイルをプロファイラで読み込んでください。
Open Watcom Execution SamplerとOpen Watcom Execution Profilerは共に、コードの中で最も頻繁に参照される箇所を的確に指し示します。すなわち、プログラムの実行効率を上げる可能性のある候補を示します。
draw???.exeターゲットをクリックします。
[Targets]メニュー項目から[Sample]を選ぶか、ツールバーから”Run and sample the current target”アイコンをクリックします。Open Watcom Execution Samplerが起動し、アプリケーションが実行されます。
画像の回転やサイズ変更を何度か繰り返してください。サンプラーは定期的な間隔で実行しているコードの”スナップショット”を取得します。その後、アプリケーションを終了してください。.smp拡張子のサンプルファイルが、カレントディレクトリ内に作成されます。このファイルは、プロファイラへの入力に使用されます。
さて、実行ファイルの調査環境が整いました。この操作は、[Targets]メニューの[Profile]を選択するか、ツールバーの”Profile the currnet target”アイコンをクリックすることで実行できます。プロファイラは.smp拡張子のファイルを調査し、アプリケーションの様々なモジュールの活動結果を出ロクします。モジュールが使用した時間の割合は絶対的な値(全サンプルに対する割合)として表示されるとともに、k相対的な値(.exeイメージ内のサンプルに対する割合)として表示されます。
モジュールまたはルーチン名をダブルクリックすると、サンプルが取得されたときの正確なソースが順を追って表示されます。より詳細な結果を取得するには、サンプラーがコードのより良いスナップショットを取得するために、サンプルを取得する頻度を調整することができます。このためには、プロファイラを終了し、[Targets]メニューをプルダウンして[Target Options]を選択、さらに[Sample switches...]をポップアップメニューから選択する必要があります。たとえばSamping rateを2(2ミリ秒の場合)に設定し、OKをクリックしてサンプラーとプロファイラを再度実行してください。
Figure 14. Open Watcom Execution Profiler
以上で、IDEを終了することができます。IDEの終了には、[File]メニューから[Exit]を選択してください。もし、まだプロジェクトを保存していないのでしたら、保存するかどうかのプロンプトが表示されます。”Yes”を選択してセッションを終了してください。
このチュートリアルでは、draw???.exeとbutton.libという二つのターゲットを持つkitchen.wpjと呼ばれるプロジェクトを作成しました。コンパイルとリンクを行い実行ファイルを生成するためにWMAKEユーティリティ、Open Watcom C/C++コンパイラとOpen Watcomリンカを使用しました。作成した実行ファイルは直接実行したほか、Open Watcomデバッガの管理下で実行しました。ソースを閲覧し、text and resource editor(訳注:OS/2版では任意のテキスト編集ソフト)を使って変更も加えました。最後に、アプリケーションのサンプル抽出と分析を行いました。
プロジェクトを保存すると、以下のファイルが作成されます。
以下に、Open Watcom C/C++のドキュメント一覧を示します。Open Watcom C/C++をインストールすると、ドキュメントの一部はオンラインヘルプファイルとして提供されます。以下の分類は、オンラインヘルプを参照する際の助けとなるでしょう。
以下に、Open Watcom C/C++のドキュメント一覧のタイトルを記載します。
このマニュアルでは、Open Watcom C/C++の使用方法を解説しています。本書には、コンパイラの入門とチュートリアルが含まれています。本書はまた、コンパイラのオプション、コンパイル前のヘッダファイル、ライブラリ、メモリモジュール、呼出規約、pragma(?)、インラインアセンブラ、ROMベースのアプリケーション、そして環境変数について記載しています。
このマニュアルではコマンドラインのツール、すなわちコンパイラとリンクユーティリティ、ライブラリマネージャ、オブジェクトファイルの逆アセンブラ、”far call”最適化ツール、アセンブラ、パッチユーティリティ、ストリップユーティリティ、メイクユーティリティ、そしてタッチユーティリティについて記載しています。
このマニュアルではOpen WatcomのWindowsとOS/2版のグラフィカルツール、すなわちIDE(統合開発環境)、ブラウザ、Dr. Watcom、Spy、DDE Spy、イメージエディタ、リソースエディタ、サンプラー/プロファイラ、リソースコンパイラ、ヒープウォーカ、ズーム、そしてエディタについて記載しています。
このマニュアルでは5つの大項目に分け、オペレーティングシステム固有の開発における注意点について記載しています。オペレーティングシステムは、拡張DOS、OS/2、Windows 3.x、Windows NT/2000/XP、Windows 95/98/Me、32ビットWindows 3.x(Open Watcomの管理テクノロジを利用)、Novell NLMsについて網羅しています。内容は、サンプルプログラムの作成、オペレーティングシステム固有のエラーメッセージ、そしてデバッギングのテクニックについて紹介しています。
このマニュアルでは、ISO Cプログラミング言語と、Open Watcom Cで利用できる拡張内容について述べています。
これらのマニュアルでは、Open Watcom C/C++でサポートされるCとグラフィックのライブラリについて解説しています。
このマニュアルではOpen Watcom C/C++で提供されるC++クラスライブラリ全般の情報を閲覧できます。
このマニュアルではOpen Watcomデバッガと高度なデバッギングテクニックについて紹介しています。
このマニュアルでは、拡張DOS、Windows 3.x、Windows 95/98/Me、Windows NT/2000/XP、OS/2、Novell NLMsといったターゲット環境に対する実行ファイルを生成する際に、どのようにOpen Watcomリンカを利用するかについて解説しています。
以下の章では、DOS、Windows、OS/2においてオンラインヘルプを参照する方法について記載しています。
DOS環境下でオンラインドキュメントを参照するには、Open Watcomのヘルププログラム、WHELPを使用します。Open Watcomヘルプのコマンドラインでの記述は、以下の通りです。
WHELP help_file [topic_name]
注意点。
help_fileが拡張子無しで指定された場合、拡張子は”.IHP”と仮定されます。
topic_nameパラメータはオプションです。
topic_nameが指定されなかった場合、初期値は”Table of Contents”となります。
topic_nameに空白が含まれる場合、クォートで囲ってください。
以下のヘルプファイルが用意されています。
Open Watcom C/C++ユーザーズガイド(別途ヘルプファイルが用意されているCおよびC++診断メッセージを除く)。
Open Watcom Cライブラリリファレンス。
Open Watcom C言語リファレンス。
Open Watcom C/C++ 総索引。
Open Watcom C++ クラスライブラリリファレンス。
Open Watcom リンカユーザーズガイド。
Open Watcom C/C++ プログラマーズガイド。
Open Watcom C/C++ をはじめるために。
Open Watcom リソースコンパイラのドキュメント(Open Watcom グラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C/C++ ツールユーザーズガイド。
Open Watcom デバッガユーザーズガイド。
Open Watcom 実行ファイルサンプラーとOpen Watcom 実行ファイルプロファイラのドキュメント(Open Watcom グラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C診断メッセージのドキュメント(Open Watcom C/C++ユーザーズガイドからの抜粋)。
Open Watcom C++診断メッセージのドキュメント(Open Watcom C/C++ユーザーズガイドからの抜粋)。
オンラインドキュメントは、Windowsのヘルプファイル(”.HLP”ファイル)形式で用意されています。Open Watcom C/C++をWindows 3.x、Windows 95/98/Me、Windows NT/2000/XPにインストールすると、いくつかのプログラムグループが作成されます。オンラインドキュメントは、プログラムグループを開きヘルプアイコンをダブルクリックすることで参照できます。
Open Watcom C/C++グループの内容は以下の通りです。
Open Watcom C/C++をはじめるために。
Open Watcom C/C++ Tools Helpグループの内容は以下の通りです。
アクセラレータエディタについての情報です(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C診断メッセージについての情報です(Open Watcom C/C++ユーザーズガイドからの抜粋)。
Open Watcom C++診断メッセージについての情報です(Open Watcom C/C++ユーザーズガイドからの抜粋)。
Open WatcomのC言語リファレンス。
Open WatcomのCライブラリリファレンス。
Open WatcomのC++クラスライブラリリファレンス。
Open Watcom C/C++オンラインヘルプの総索引
DDEスパイユーティリティに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcomのデバッガに関する使い方。
ダイアログエディタに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcomエディタに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
ヒープウォーカユーティリティに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
統合開発環境に関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
イメージエディタに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcomリンカの使い方。
メニューエディタに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom実行ファイルサンプラーとOpen Watcom実行ファイルプロファイラに関する情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C/C++プログラマー向けの情報。
リソースコンパイラの情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
リソースエディタの情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
ブラウザの情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
スパイユーティリティの情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
ストリングエディタの情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C/C++の使い方(別途ヘルプファイルが用意されているCおよびC++診断メッセージを除く)。
ズームユーティリティの情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
オンラインドキュメントは、OS/2のインフォメーションファイル形式(”.INF”ファイル)で提供されます。Open Watcom C/C++をOS/2環境に導入すると、Open Watcom C/C++フォルダが作成されます。このフォルダを開き、ヘルプアイコンをダブルクリックすることでオンラインドキュメントを参照できます。
C診断メッセージの情報(Open Watcom C/C++ユーザーズガイドからの抜粋)。
C++診断メッセージの情報(Open Watcom C/C++ユーザーズガイドからの抜粋)。
Open WatcomのC言語リファレンス。
Open WatcomのC++クラスライブラリリファレンス。
Open Watcom C/C++オンラインヘルプの総索引。
Open Watcomデバッガの使い方。
Open Watcom C/C++を始めるために。
統合開発環境についての情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcomの実行ファイルサンプラーとOpen Watcomの実行ファイルプロファイラについての情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C/C++プログラマーへの情報。
Open Watcomブラウザについての情報(Open Watcomグラフィカルツールユーザーズガイドからの抜粋)。
Open Watcom C/C++ツールの使い方。
Open Watcom C/C++の使い方(別途ヘルプファイルが用意されているCおよびC++診断メッセージを除く)。
Open Watcom C/C++コンパイラにはコードから実行ファイルを生成する際の制御用に、豊富なオプションを用意しています。すべてのアプリケーションに対して、共通して最も速い実行時間を実現することを確実にするコンパイラオプションのセットを作ることは不可能です。このため、ここでは、ほとんどのアプリケーションに対して最良の実行時間を実現すると予想されるコンパイラオプションの一覧を示します。個別のアプリケーションについて、どのオプションの組み合わせが最速のコードを生成するのか、異なるオプションを試さなければならない場合もあるでしょう。
最速の16ビットインテルコードを生成するための推奨オプションは、以下の通りです。
/onatx /oh /oi+ /ei /zp8 /6 /fpi87 /fp6
/onatx /oh /oi+ /ei /zp8 /5 /fpi87 /fp5
/onatx /oh /oi+ /ei /zp8 /4 /fpi87 /fp3
/onatx /oh /oi+ /ei /zp8 /3 /fpi87 /fp3
/onatx /oh /oi+ /ei /zp8 /2 /fpi87 /fp2
/onatx /oh /oi+ /ei /zp8 /1 /fpi87
/onatx /oh /oi+ /ei /zp8 /0 /fpi87
最速の32ビットインテルコードを生成するための推奨オプションは、以下の通りです。
/onatx /oh /oi+ /ei /zp8 /fp6
/onatx /oh /oi+ /ei /zp8 /5 /fp5
/onatx /oh /oi+ /ei /zp8 /4 /fp3
/onatx /oh /oi+ /ei /zp8 /3 /fp3
”oi+”オプションは、C++専用です。ある環境下では、”ob”と”ol+”による最適化が32ビットインテルコードによりよい性能をもたらすことがあります。
”on”オプションは、コンパイラが浮動小数点の除算を乗算に変換して置き換えます。これはより速いコードを生成しますが(乗算は除算より速いため)、計算結果が同一になるとは限りません。なぜならば、変換は正確に行われるとは限らないからです。
”oe”オプションは、小規模なユーザ定義関数の呼出を生成するかわりに、関数をインラインに展開します。関数をインラインに展開することで、関数の呼出が生成されたことを検出する方法を最適化するよりも効率よく、コードを実行することができます。
”oa”オプションは、コンパイラの別名チェックする基準を「ゆるく」します。
”ot”オプションは、コード生成過程においてコードサイズに一切構わず、より速いコード順序を選択するためには必ず指定しなくてはなりません。
”ox”オプションは”obmiler”と”s”オプションの組み合わせと同等の効果をもたらします。本オプションを指定することで、コンパイラ/コード生成器においての分岐予測(”ob”)、サイン、コサイン、平方根のような数学関数においてインラインの387命令を生成(”om”)、組み込み関数のインライン展開(”oi”)、ループ最適化の実行(”ol”)、小規模なユーザ関数のインライン展開(”oe”)、パイプラインの停止を避けるための命令再発行(”or”)、そしてスタックオーバフローの確認を生成しない(”s”)といった機能が有効になります。”or”オプションは、PentiumおよびPentium Proプロセッサにおいて高速なコードを生成するのに、非常に重要なものとなります。
”oh”オプションは、最適化の繰り返しを試行します(コンパイルに長時間かかりますが、より最適化されたコードを生成します)。
”oi+”オプションは、C++コンパイラで組み込み関数をインラインに展開します(ちょうど”oi”オプションと似たようなものです)。さらに、inline_depthを最大値(255)に設定します。初期値では、inline_depthの値は3となります。inline_depthの値は、C++のinline_depthプラグマを使用して変更することもできます。
”ei”オプションは、すべての列挙型について少なくとも”int”を割り当てます。
”zp8”オプションは、すべてのデータを8ビットの境界に揃えます。初期値は16ビットコンパイラが”zp2”で、32ビットコンパイラが”zp8”となります。たとえばもし”zp1”が指定されると、必要となるデータメモリの総計を減らすためにすべてのデータがまとめられますが、特有の境界上にないデータにアクセスするためには余分なクロックサイクルを必要とします。
”0”、”1”、”2”、”3”、”4”、”5”、”6”のオプションは、プロセッサ固有の命令セット機能とタイミングのためにインテルコードシーケンスの最適化を発行します。16ビットインテルアプリケーションでは、これらのオプションを利用するとアプリケーションを実行するシステムリソースを使い切ってしまうかもしれませんが、実効性能は上昇します。
”fp2”、”fp3”、”fp5”、”fp6”のオプションは、インテルシリーズの数学コプロセッサに含まれる特殊機能において、インテル浮動小数点の演算対象を発行します。16ビットインテルアプリケーションでは、これらのオプションを利用するとアプリケーションを実行するシステムリソースを使い切ってしまうかもしれませんが、実効性能は上昇します。
”fpi87”オプションは、インラインのインテル80x87数値データプロセッサ命令を、浮動小数点演算のオブジェクトコードへと変換します。浮動小数点命令のエミュレーションは含まれないため、16ビットインテルアプリケーションでは最良の浮動小数点性能が得られます。
32ビットインテルアプリケーションでは、”fp5”オプションを指定するとPentium環境下で良好な性能が得られますが、386や486で最適化した性能には及びません。”5”オプションはPentium環境下で良好な性能が得られる上、386や486の影響があったとしても最小に押さえることができます。従って、以下のオプションの組み合わせが386、486,Pentiumすべてのプロセッサに対して良好な性能を期待できます。
/onatx /oh /oi+ /ei /zp8 /5 /fp3
この新しいバージョンのOpen Watcom C/C++には、いくつもの拡張や変更が施されています。以下の章では大きな変更点の概要について記載します。コンパイラや紹介されているツールに対するこれら、またはその他の変更点についての詳細は、ユーザーズガイドを閲覧してください。アプリケーションを再コンパイルする必要があるかどうかを判断するには、以下の章を確認してください。
以下に、Open Watcom C/C++ 1.7にて加えられた変更を列挙します。