![]() |
Turbo C++
|
![]() |
Turbo C++ 4.0J を起動すると Unhandle Exception が発生します。対応策を教えてください。 |
![]() |
上記の問題を引き起こす原因となり得る事項として以下が考えられます。
|
![]() |
Turbo C++ 4.0J の 統合環境のキーアサインを変更したいのですが? |
![]() |
TEMC(Turbo Editor Macro Compiler)を使用することでエディタをカスタマイズは可能でます。 詳細情報は DOC ディレクトリの UTILS.TXT をご覧ください。 なお,ctrl-Q については変更できません。 === 例 ========================================= |
![]() |
Turbo C++ for Windows 3.1 で,ウインドウ中に正しく表示されていたプログラムを Turbo C++ 5.0 上で同じように実行しても,実行結果を見ることができません。 また,TCW5 では TCW3.1 のようにウインドウ上に結果を表示することはできないのでしょうか? |
![]() |
Turbo C++ for Windows 3.1 で,プロジェクトを使用せず,main() をスタートモジュールにした DOS 形式のプログラムをコンパイルした場合,自動的に EasyWin 機能を使った WIN16 アプリケーションが生成されます。printf()等の結果はアプリケーションが生成したウインドウ内に出力されますが,TCW5 は,WIN32 コンパイラのため EasyWin 機能はありません。そのため,ウインドウ生成には WIN32 GUI での Windows 形式のプログラミングが必要になります。 TCW5 で TCW3.1 と同様の操作をした場合,TCW5 では デフォルトで WIN32 Consol アプリケーションとなるため,実行は Windows から DOS コンソールモードが起動されます。しかし,起動されたコンソール画面はプログラム終了時に閉じてしまうためプログラムの出力結果を確認することができません。IDE の設定でこういった状況を制御するためのオプションはないので,実行結果の確認は,Windows のMS-DOS プロンプトをあらかじめ実行して,DOS プロンプトから生成された .EXE を指定して起動するか,プログラム内の終了時に getch() 等を加えてキー入力待ちにさせるか,main()関数の return 文にブレイクポイントをはる等の方法で解決してください。 |
pc98comgetstatx 関数等 pc98com...x 関数のサンプルは pc98cominit 関数のサンプルを参照してください。 pc98cominit 関数のサンプルはヘルプで pc98cominit を検索して下さい。
また,pc98com...x 関数は全て x が付く関数と組み合せて使用します。 x が付く関数は x の付かない関数とポート番号を指定する点のみがソースレベルで異なります。
(pc98cominitx で初期化する際,フロー制御に COM_FRTSCTS は使用できません)
pc98cominit のサンプルの pc98com... 関数に x を付けてポート番号を指定するように書換えれば実行できます。
![]() |
DOS/V での pc98timer に相当する関数を教えてください。 |
![]() |
setvect(),getvect() を使用します。 setvect()とgetvect() のサンプルではタイマ-割り込みを使用しています。 |
![]() |
DOS/V で 640*480 以上の解像度の BGI はありますか? |
![]() |
DOS/V で 640*480 以上の解像度の BGI はありません。アメリカではサードパーティ ーから出ているようですが,当然英語環境での動作ですので対応は難しいでしょう。 DOS/V では,DOSVGA.BGI をご使用ください。 |
![]() |
浮動小数値を使ったプログラムを実行すると,Floating point formats not linked というエラーメッセージが表示されるのはなぜですか? |
![]() |
Turbo C++ で作成したプログラムでは,いくつかの理由によりこのメッセージが表示されます。まず,TLINK を使ってオブジェクトモジュールやライブラリをリンクする際のライブラリの指定順序が間違っている場合です。標準ライブラリは次の順序でリンカに指定しなければなりません。 GRAPHICS.LIB
EMU.LIB (または FP87.LIB)
MATHx.LIB
Cx.LIB
また,浮動小数点書式 (scanf() とその関連関数) は,.EXE ファイルのサイズを抑制するために,常にリンクされるわけではありません。これらを強制的にリンクするには,ソースコードのどこかに次の文を入れてください。 extern unsigned _floatconvert;
#pragma extref _floatconvert |
![]() |
Turbo C++ 4.0 でウィンドウズプログラムは作成できますか? |
![]() |
Turbo C++ 4.0 で作成できるのは DOS プログラムのみです。Windows プログラムを作成するには Borland C++ v4.0 または Turbo C++ v3.1 for Windows が必要です。 |
![]() |
Borland C++ 4.xJ, Turbo C++ 4.0J にはアセンブラは含まれていますか? |
![]() |
いいえ。 製品にはアセンブラは含まれていません。 必要な場合には,別途購入しくてください。 なお,直販のみでのお取り扱いになりますので,インフォメーションセンターまでお問い合わせください。 TEL: 03-5350-9380 |
![]() |
Turbo C++ 4.0J と Turbo Assembler 4.0J を購入しました。 両方の製品に Turbo Debugger が付属していますがどちらを使用すれば良いのでしょうか。 |
![]() |
Turbo C++ 4.0J に付属している Turbo Debugger は Turbo Aaaembler 4.0J に付属の物よりも新しくなっています。 Turbo C++ 4.0J に付属の方をご使用ください。 |
![]() |
BGI でサポートされるモードはどのようになっていますか? |
![]() |
Turbo C++ 4.0 と Borland C++ 4.0 付属の グラフィックドライバ(BGI)とフォントドライバ(FNT)は同等の物です。 サポートしているモードは以下のとおりです。 PC-9800シリーズ
---------------
640 * 400 * 16
1120 * 750 * 16
(PC-9821の 640 * 480 解像度はサポートされません)
DOS/Vシリーズ
-------------
CGA
EGA
VGA
(日本語モードに対応したものは,DOSVGA のみになります) |
![]() |
Turbo C++ 4.0J ではどのような最適化機能がサポートされていますか? |
![]() |
Turbo C++ 4.0J には Borland C++ 4.x のようなグローバルな最適化機能はありません。 サポートされるのは速度やサイズに関する最適化,ジャンプの最適化,386 の 32 ビットレジスタを使用した最適化などです。 |
![]() |
コンフィギュレーションファイルとはなんですか? |
![]() |
コンフィギュレーションファイルは,デフォルトのオプションが何か,ライブラリやヘッダーファイルはどこを探せばよいかを Turbo C++ に示すものです。 TCC.EXE は TURBOC.CFG という名前のファイルを探します。 統合環境 TC.EXE はデフォルトの環境設定ファイルの TCCONFIG.TC,TCDEF.DPR,および TCDEF.DSK を探します。 |
![]() |
コンフィギュレーションファイルはどのように作成したらよいのでしょうか? | |||||||||||||||||||||||||
![]() |
INSTALL プログラムを実行すると,TURBOC.CFG という名前のコンフィギュレーションファイルが作成されます。 このファイルはテキストエディタを使ってユーザーが変更できるテキストファイルです。 このファイルには,TCC.EXE によって使用されるライブラリファイルおよびヘッダーファイルに関するパス情報が記述されています。 IDE(TC.EXE) の場合には,最初に IDE を起動したときに環境設定ファイルが作成されます。 これらのファイルは,ユーザーが終了するたびに自動的に保存されます。 [O:オプション(Options)|E:環境(Environment)]の[P:諸設定(Preferences)...]を選択すると表示される[Auto-Save]オプションを使って,この自動保存機能を無効にできます。 また,[O:オプション(Options)|S:保存(Save)...]を選択して,使用中のオプションを明示的に保存することもできます。 このメニューに一覧表示されるオプションとそれぞれのオプションが対応するファイルは,以下のとおりです。
|
![]() |
派生クラスのメンバー関数を呼ぶことを可能にするために,基本クラスポインタを派生クラスのポインタに型変換するとどのような問題が発生する可能性がありますか? |
![]() |
文法的には可能です。基本ポインタが基本クラスを実際に指している可能性は常に存在します。 もしこれが派生した型への型変換の場合,呼ばれている関数は基本クラスに存在しないかもしれません。 したがって存在しない関数のアドレスを得ていることになります。 |
![]() |
キーワードの struct と class の違いは何ですか? |
![]() |
struct のメンバーはデフォルトではパブリックになっていますが class のメンバーはデフォルトではプライベートになっています。 それ以外は機能的には同じです。 |
![]() |
複数のプログラムを扱いたいのですが,統合環境 (TC.EXE) を起動するときに,自動的にプロジェクトファイルを読み込むにはどうすればよいのですか。 |
![]() |
カレントディレクトリにプロジェクトファイルが1つしかなければ,Turbo C++ はそのファイルを読み込みます。 プロジェクトファイルがないか,複数のプロジェクトファイルがあれば,Turbo C++ は自動的にはプロジェクトファイルを読み込みません。 新しくプロジェクトファイルを作成してください。 特定のプロジェクトファイルを使いたい場合は,Turbo C++ を起動するときに,コマンドラインでその名前を指定してください。 たとえば tc farely.prj として TC.EXE を起動すると,farely プロジェクトがロードされます。 |
![]() |
マウスの右ボタンが何も機能していないようです。たとえば,ブレークポイントを設定する機能に割り当てることはできますか? |
![]() |
できます。[Options(O:オプション)|Environment(E:環境)|Mouse(M:マウス)...]メニューを選択すると,右ボタンの機能を選択するダイアログボックスがオープンします。 ここで,ブレークポイント(Breakpoint)を選択したり,他の機能を割り当てることもできます。 |
![]() |
コンパイル中に,次のようなエラーが発生しました。 何が起きたのでしょう?
Error: A:\BORLAND\INCLUDE\STDIO.H: Overlays only supported in medium, large, and huge memory models |
![]() |
オーバーレイに関するオプションが指定されましたが,オーバーレイはタイニィ,スモール,コンパクトモデルでは動作しません。 これ以外のメモリモデルに変更してください。 |
![]() |
マウスを持っていないのですが,ファイルから別のファイルにブロックの内容をコピーすることはできますか? |
![]() |
ブロックの始点/終点は CTRL-K B と CTRL-K K で選択できます。 また,これらのブロックは,Edit メニューの Copy (CTRL-INS),Paste (SHIFT-INS) コマンドを使って,異なるファイル間でブロックの転送が行なえます。 |
![]() |
スクロールバーをマウスでクリックして,編集画面をスクロールさせたのですが,キーを押したら移動前の場所に戻ってしまいました。 |
![]() |
スクロールバーをクリックしただけでは,内部のカーソル位置は変更されません。 カーソル位置を更新するためには,実際に Edit ウインドウの一部をクリックしてください。 |
![]() |
言語ヘルプを使おうとして,キーワード上で CTRL-F1 を押しましたがヘルプ画面がちらつくだけで,正しい画面が表示されません。 |
![]() |
そのキーワードに対するヘルプ画面が用意されていないと思われます。 キーワードの検索は,いったんインデックス画面を表示して,インクリメンタルサーチが行なわれます。 このため,取り込んだキーワードの先頭の何文字かに対応してインデックス画面中の最も近い単語が表示されます。 |
![]() |
C++ モードでコンパイルしたときに,const 型の整数をウォッチすることができません。 |
![]() |
C++ モードでは,const 型の変数が実際のデータ領域に確保されるとは限りません。 const int 型として定義したものは,データ領域に確保されないこともありますので,このときはウォッチすることができません。 |
![]() |
置換をするために検索文字列は入力できるのですが,置換文字列を入力することができません。 |
![]() |
ダイアログボックスでは,項目を移動するためには TAB キーを使います。 リターンキーは OK のショートカットとして機能するため,検索文字列を入力した後でリターンを押すと,直ちに置換が開始されてしまいます。 |
![]() |
トランスファ項目にエディタを指定しているのですが,統合環境で編集する前のファイルが渡されてしまうようです。 トランスファプログラムを実行する前に Edit ウインドウの内容をファイルに保存することはできませんか? |
![]() |
トランスファ項目のうち,Command Line に $SAVE CUR を指定してください。 こうすることで,アクティブな Edit ウィンドウのファイルが保存されてからトランスファプログラムが呼び出されます。 |
![]() |
File|DOS shell で COMMAND.COM を呼び出しているときに,ADDDRV でかな漢字変換フロントプロセッサを組み込んだら,動作がおかしくなりました。 |
![]() |
File|DOS shell では,メモリに常駐するプログラムはいっさい使用できません。 したがって,File|DOS shell で COMMAND.COM を呼び出しているときに ADDDRV やPRINT コマンドを使うことはできません。 |
![]() |
タブ文字を入力してもカーソルがタブ文字をスキップしません。タブ文字はスペースと置き換えられてしまっているのですか? |
![]() |
[Options(O:オプション)|Environment(E:環境)|Editor(E:エディタ)...]のEditor options で,Use tab character がチェック [X] されている場合は,タブ文字はタブ文字として扱われます。 この項目がチェックされていなければ,チェックしてください。 そうでない場合は,Cursor through tabs の項目を確認してください。 この項目は,タブ文字上のカーソル移動をスキップさせるときは,この項目をチェックしないでください。 |
![]() |
統合環境からプログラムを実行したり,終了するたびに色々なファイルが書き込まれているようです。 こうしたファイルの書き込みをせずに,もっと動作を速くすることはできませんか? |
![]() |
デフォルトでは,Turbo C++ は,プログラムを実行したり統合環境を終了・起動するたびに環境,デスクトップ,プロジェクトの3種類をファイルに退避・復帰するようになっています。 このため,いつでも以前の状態から作業を続けることができます。 [Options(O:オプション)|Environment(E:環境)]の[Preferences(P:諸設定)...]を選択し,このダイアログボックス中の Auto save のチェックボックスをすべてオフにすることで,こうした作業を行なわないようになります。 この場合でも,[Options(O:オプション)|Save(S:保存)...]を選択すれば,その時点での作業環境を保存しておくことができます。 |
![]() |
統合環境とコマンドラインコンパイラで,出力されるエラーやプログラムの実行結果が異なるのはなぜですか。 |
![]() |
統合環境とコマンドラインコンパイラで,コンパイル結果が異なる場合はいくつかのケースが考えられます。 もっとも考えられるのは,それぞれの環境で設定されているオプションが異なる場合です。 Turbo C++ には,メモリモデルや生成コードに関するオプション,警告の種類などに関するさまざまなオプションが用意されています。 これらの設定が異なっていれば,コンパイル時のメッセージや実行結果にも影響を及ぼします。 特に,一方の設定が C++ モードで,もう一方が C モードになっている場合,一般に C++ の方が C よりも型に関するチェックが厳しいため,C でエラーにならなかった構文でもエラーメッセージが表示されることがあります。 こうした設定内容の違いが原因と考えられる場合は,どちらかの設定内容を合わせるようにするか,再度インストールし直してください。 また,使用可能メモリの違いによってプログラムの実行結果が異なることもあります。 コマンドラインコンパイラは,コンパイル作業のみを 行なうことで大規模なプログラムのコンパイルを可能としていますが,統合環境はプログラムの編集からデバッグまですべての機能を備えており,そのためコンパイルできる大きさがコマンドラインコンパイラに比べて制限されます。 プログラムを実行させる場合も,統合環境から実行させる場合とコマンドラインから実行させる場合では,使用できるメモリ容量がかなり異なります。 大量のメモリを必要とするプログラムは,コマンドラインから実行するようにしてください。 この他,(特にラージデータモデルでのプログラミングにおいて) 不正にメモリを破壊するコードがある場合,実行環境の違いにより破壊されるメモリアドレスが異なるため不具合の発生する症状が異なることがあります。 |
![]() |
なぜ,TC.EXE で生成される .EXE ファイルは TCC.EXE で生成されるものより大きいのでしょう? |
![]() |
デフォルトのコンフィギュレーションでは,TC.EXE は生成する実行ファイルの中にデバッグ情報を埋め込みますが,TCC.EXE ではそうしません。 このデバッグ情報を作成する必要がないときは,統合環境版で[Options(O:オプション)|Debugger(B:デバッガ)]の[Source debugging]で[None]を選択しておけばデバッグ情報は埋め込まれません。 |
![]() |
統合環境の Library directories にライブラリ名を登録していますが,正しく認識されていないようです。 |
![]() |
Library Directories に登録できるのは,あくまでもディレクトリ名だけで,ライブラリ名を直接指定することはできません。 統合環境から,標準ライブラリ以外のライブラリをリンクする場合は,プロジェクト機能を使用してください。 |
![]() |
scanf で入力した後,gets や getchar がスキップされてしまうことがあります。 |
![]() |
scanf は,読み込む前の空白文字(スペース,改行など)は,読み飛ばしますが,読み込んだ後の空白文字は,そのまま入力バッファに残ります。 この後で,gets やgetchar を実行すると,バッファに残っている改行文字が入力されてしまい,見かけ上スキップされるように見えます。 たとえば,scanf の書式指定の末尾に %*c と書いておくか,scanf の実行後に fflush(stdin); などを使って入力バッファをクリアしておけば,この問題を回避することができます。 scanf は,注意して使わなければならない関数の1つです。 |
![]() |
scanf で数値を入力しているのですが,何も入力せずに改行しても scanf を終了しません。 |
![]() |
scanf では,%c 以外の書式ではスペース,改行文字などはすべて空白文字としてスキップされます。 したがって,改行を入力しても数値や文字列の区切りとして認識されるだけです。 また,書式として %d などで数値を入力するようにしている場合数値以外の文字がくると入力が中断されてしまいます。 |
![]() |
次のプログラムを実行しても,プリンタが正しく改行しません。 fprintf(stdprn, "Hello, printer!\n"); |
![]() |
Turbo C++ では,stdprn はバイナリモードでオープンされています。 PC-98 シリーズ用のプリンタの多くは,復帰 (\r) 改行 (\n) の両方を出力しないと正しく改行しません。 したがって,\n のかわりに \r\n と記述してください。 |
![]() |
プリンタに文字コード0x1Aを出力したいのですがうまくいきません。 |
![]() |
stdprn を使っている場合は,文字コード 0x1A を出力することはできません。 例えば,PC-98 では,pc98print などを使って BIOS を直接操作してください。 このとき,stdprn の出力と BIOS の出力を混在させると,バッファリングの関係で出力のタイミングがずれることがあります。BIOS で出力を行なう前に,必ずfflush 関数を使って stdprn ストリームにバッファされている内容を出力するか,setvbuf などでバッファリングを行なわないモードに設定してください。 |
![]() |
与えられた桁数だけ空白を出力するような関数はありませんか。 |
![]() |
専用の関数はありませんが,printf を使って次のように実現できます。 printf("%*s", n, ""); ここで,printf の書式指定で,% の後ろの * は,引数列の数値がそのまま適用されます。 たとえば,printf("%*s", 20, ""); は,printf("%20s", ""); と同じ意味になり,20 桁の幅で空文字列 (空白) が出力されます。 n には適当な整数変数を使用できます。 |
![]() |
VZ エディタを常駐させていますが,トランスファ機能を使って VZ を呼び出そうとすると,VZ が解放されてしまいます。 |
![]() |
VZ エディタは,子プロセスを呼び出すファンクションをトラップしてディスク上のVZ が子プロセスとして呼び出されないような処理を行なっています。 これは,ディスク上の VZ が呼び出されると常駐している VZ を解放してしまうためです。 VZ は統合環境で子プロセスを呼び出すために使われているファンクションに対応していないため,ディスク上から VZ を呼び出してしまい,自分自身を解放してしまいます。 VZ が常駐している場合は,間接的に VZ を呼び出すために次のようにトランスファを設定してください。 この場合,PATH に設定されているディレクトリのどこかにCOMMAND.COM をコピーしておかなければなりません。 Program Title [VZ EDITOR (resident mode) ] Program Path [COMMAND.COM ] Command Line [$SAVE CUR /C VZ $EDNAME ] ※編集中のファイルをクローズせずに VZ を終了してはいけません。 メモリ管理の関係で誤動作やハングアップの原因となります。 |
![]() |
VZ エディタを常駐させて使用しています。同時に THELP でヘルプを参照したいのですが,HELP キーを押してもヘルプがポップアップしません。 |
![]() |
VZ エディタを常駐使用している場合に THELP を組み込むときは,THELP に /VZ オプションを指定してください。 VZ は常駐すると INDOSFLAG を立てずに INT 28h を呼び出します。 このため,THELP はポップアップすることができなくなってしまいます。 /VZ オプションを指定した場合 THELP は INT 28h からのポップアップ要求では INDOSFLAG をチェックせずに起動することで,この問題を回避しています。 なお,このオプションは VZ エディタ常駐時以外は指定してはいけません。 |
![]() |
THELP からエディタにペーストすると,後ろの行にいくにつれて列がずれてしまいます。 |
![]() |
エディタがオートインデントモードになっていると思われます。 ペーストするときはオートインデントモードをオフにしてください。 |
Trademarks & Copyright (C) 1998 INPRISE Corporation. Last modified on 8-June-1998.