[C++ コンパイラ|拡張]

提供: Appmethod Topics
移動先: 案内検索

[C++ コンパイラ] への移動


[プロジェクト|オプション...|C++ コンパイラ|拡張]

このダイアログ ボックスを使用して、C++ コンパイラのコンパイル拡張オプションを設定します。

オプション 説明

[ターゲット]、[適用...]、[保存...]

[ターゲット]オプション」を参照。

共通項目

[<プロジェクト名> のプロジェクト オプション]ページの共通項目」を参照。


[アセンブラ オプション]

[アセンブラ オプション] 説明 コンパイラでのサポート
bcc32 bcc64 bccosx bcciosarm bcciosarm64 bccaarm

[アセンブラ オプション]

現在のプロジェクトに追加するアセンブラ オプション(-TX-T など)を入力します。ここで指定したオプションは、[使用するアセンブラを指定]オプションで指定したアセンブラかデフォルト アセンブラ(32 ビット Windows では TASM32)に渡されます。

YesC++11Feature.png

[.ASM にコンパイルしてから .OBJ にアセンブルする]

コンパイラは、C++(または C)ソース コードから .ASM ファイルをまず生成します。 次に、TASM32(または[使用するアセンブラを指定]で指定されたアセンブラ)を呼び出して、.ASM ファイルから .OBJ ファイルを生成します。.ASM ファイルはそのあと削除されます。

アセンブリのキーワードになっている静的グローバル変数が C または C++ ソース コードで宣言されている場合、プログラムは、-B オプションを付けてコンパイルできません。これは、コンパイラが(他の変数の場合とは異なり)静的グローバル変数の先頭にアンダースコアを付けず、その結果、コードのアセンブル時にアセンブリ キーワードが原因でエラーが発生するためです。デフォルト値は[false]です。

YesC++11Feature.png

[使用するアセンブラを指定]

指定されたファイル名のアセンブラを使って、命令をアセンブルします。32 ビット Windows 版コンパイラでは、TASM32 をデフォルト アセンブラとして使用します。参照 ポップアップ ボタンについては、「[<プロジェクト名> のプロジェクト オプション]ページの共通項目」で説明されています。

YesC++11Feature.png

[浮動小数点演算]オプション

[浮動小数点演算]オプション 説明 コンパイラでのサポート
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

[FDIV の不具合を修正]

初期の Pentium では、特定の浮動小数点除算を正確に実行できないチップがあります。この問題に直面することはめったにありませんが、このオプションを使用すると、浮動小数点数演算をエミュレートするコードが挿入されて、正確な演算結果が保証されます。このオプションをオンにすると、プログラムの FDIV 命令の性能が低下します。このオプションは、FDIV 命令を補正する必要があるモジュールに対してのみ使用してください。ランタイム ライブラリでも FDIV 命令は使用されていますが、このオプションによって補正の有無は変更されません。ランタイム ライブラリを補正するには、このオプションを使って該当するランタイム ライブラリを再コンパイルします。

このオプションを使用する場合、次の関数は、補正されていないアセンブリ言語で FDIV 命令を使用します。

acosacoslacosasinasinlatanatan2atan2latanlcoscoshcoshlcoslexpexplfmodfmodlpowpow10pow10lpowlsinsinhsinhlsinltantanhtanhltanl

printfscanf については補正されません。
デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png

[高速浮動小数点演算]

明示的な型変換か暗黙の型変換かに関係なく、浮動小数点数演算が最適化されます。これにより、浮動小数点数演算が ANSI のオペレーティング モードより速くなります。

このオプションの目的は、C の本来の意味に反した技術を使って最適化を認めることにあります。

double x; x = (float) (3.5*x);

これを正しく実行するには、x に 3.5 を掛けて、float 精度に切り捨てられた double を算出し、次に double として x に格納します。高速実数演算では、long double 値が直接 double に変換されます。サイズの小さな浮動小数点への受け渡しで生じる桁落ちによって動作が異なるプログラムはまれなので、このオプションがデフォルトになっています。

このオプションのチェックをはずすと、コンパイラは浮動小数点の変換に関して、ANSI の規約に忠実に従い、浮動小数点数演算を行います。
デフォルト値は[true]です。

YesC++11Feature.png
YesC++11Feature.png

[浮動小数点比較をサイレント モードで実行]

サイレント モードの浮動小数点命令(FUCOMP)を使用します。

デフォルト値は[true]です。

YesC++11Feature.png
YesC++11Feature.png

[その他のオプション]

[その他のオプション] 説明 コンパイラでのサポート
     bcc32          bcc64         bccosx         bcciosarm         bcciosarm64         bccaarm    

[コンパイラに渡す追加オプション]

現在のプロジェクトに追加するコンパイラのオプションを入力します。

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

[コード ページ]

ソース コードに BOM(バイト オーダー マーク)が含まれていない場合に ANSI ソース コードで使われる、デフォルトのテキスト文字セットを設定します。

これにより、ユーザー定義のコード ページをサポートできるようになります。このオプションは、主に、マルチバイト文字列(MBCS)を構文解析および変換する方法をコンパイラに指示するために使用します。

入力フィールドには次のいずれかを指定することができます。

  • 実際のコード ページ番号。たとえば次のようなものです。
    • ヨーロッパ言語の場合は 1250
    • 日本語の場合は 932
  • コード ページ エンコーディングのテキスト識別子。UTF8、UTF32、SJIS(日本語の Shift-JIS を表す)などです。

たとえば、-CP オプションに 65001 または UTF8 を指定すると、コンパイラでは BOM を持たないソース コードに対して UTF8 エンコーディングをサポートします。

コード ページが有効になる範囲は以下の 2 つです。

  • 文字列定数、コメント、#error、および #pragma 指令
このセットに属する MBCS 文字列の場合、Windows API 関数 IsDBCSLeadByteEx への呼び出しを使って正確なコード ページを指定しなければなりません。この関数を使用する場合、コード ページを指定すると、特定のロケールのために MBCS を正確に構文解析することができます(たとえば、この関数を使用すると、コンパイラが MBCS の末尾バイトのバックスラッシュを正確に構文解析できます)。
  • ワイド文字の文字列定数
このセットに属する MBCS 文字列(ワイド文字の文字列定数)の場合、正確なコードページを指定すると、Windows API 関数 MultiByteToWideChar を使って MBCS 文字列を Unicode 文字列に変換できます。


以下のルールが適用されます。

  1. コード ページを設定する場合、数値は Microsoft NLS Code Page ID の値に従わなければなりません。以下に例を示します。
    • 米国の MS-DOS アプリケーションは 437 コード ページを使用します。
    • 日本の場合には 932 を使用します。
  2. 数値は OS がサポートする有効なコード ページでなければなりません。
  3. アジア語のロケールとコード ページをアクセス可能にするために、関連する Windows NLS ファイルをインストールしなければならない場合があります。詳細は Microsoft NLS コード ページの一覧を参照。
  4. コードページ値を指定しない場合、コンパイラは Windows API 関数 GetACP を呼び出してシステムのデフォルトコードページを取得し、上記のように文字列を処理するときにはその値を使用します。

デフォルトではコード ページは使用されません。

YesC++11Feature.png
YesC++11Feature.png

[実行文字セット]

実行文字セットを設定します。これは実行可能ファイルの ANSI 文字列で使われます。

[実行文字セット]オプションは、マルチデバイス アプリケーションで使うように設計されたものです。
ホストやターゲットが Windows の場合には、デフォルトのテキスト エンコーディングはアプリケーションの ANSI エンコーディング([コード ページ]オプション)と同じになります。
ただし、マルチデバイス アプリケーションでは、ターゲットの ANSI エンコーディングとホストの ANSI エンコーディングが同じとは限りません。
たとえば、POSIX システム(OS X や最新の Linux を含む)では、システム エンコーディングとして UTF8 を使用するため、[実行文字セット]を "UTF8" に設定する必要があります。

[実行文字セット]に "932" を指定してアプリケーションをコンパイルすると、コンパイル時の環境が "932" かどうかに関係なく、文字列リテラルはすべて "932"(日本語 SJIS)エンコーディングとしてコンパイルされます。ワイド文字列リテラル(L"Test" など)はこのオプションの影響を受けません。

場合によっては、[コード ページ]オプションの値が[実行文字セット]オプションに使われます。次の表は、[コード ページ]オプションと[実行文字セット]オプションの関係を表したものです。

オプション指定の有無 説明
[コード ページ] [実行文字セット]
  • Windows がターゲットであれば、コンパイラは Windows システム コード ページ(CP_ACP)をテキスト文字セットと実行文字セットの両方に使用します。
  • Mac OS X がターゲットであれば、コンパイラは Windows システム コード ページ(CP_ACP)をテキスト文字セットに、UTF-8 を Mac OS X 上の実行文字セットに使用します。
YesC++11Feature.png

コンパイラは、[コード ページ]の値を、テキスト文字セットと実行文字セットの両方に使用します。

YesC++11Feature.png

コンパイラは、[実行文字セット]の値を実行文字セットに使用し、ターゲットが Windows であればシステム コード ページ(CP_ACP)、マルチデバイスであればプラットフォーム固有のエンコーディング(Mac OS X では LC_CTYPE)を使用します。

YesC++11Feature.png
YesC++11Feature.png

コンパイラは、[コード ページ]の値をテキスト文字セットに、[実行文字セット]の値を実行文字セットに使用します。

YesC++11Feature.png
YesC++11Feature.png

[連続したメモリ割り当てブロックの最小サイズ (MB 単位)]

連続したメモリ割り当てに使用する最小サイズを指定します。

デフォルトは(no =nMB)で、これは使用可能な最大のチャンクを使用するという意味です。

たとえば、PCH を使用していない大規模なプロジェクトをコンパイルする場合や、非常に大きな(おそらくは自動生成された)ソース ファイル、数多くのソースがインクルードされていてファイルごとの宣言数が多くなったファイルを扱う場合などに、このオプションを設定すると有益です。

YesC++11Feature.png
YesC++11Feature.png

[unsigned char 型]

コンパイラは、char 宣言を unsigned char 型であるかのように処理します。これにより、他のコンパイラとの互換性が提供されます。
デフォルト値は[false]です(char 型は符号付きになります)。

YesC++11Feature.png
YesC++11Feature.png

[iOS ユニバーサル バイナリ ファイルの生成 (armv7 + arm64)]

コンパイラは、32 ビットと 64 ビット両方の iOS 用ユニバーサル バイナリ ファイルを作成します。
デフォルト値は[false]です(64 ビット バイナリのみ作成されます)。

YesC++11Feature.png

[ソース]オプション

[ソース]オプション 説明 コンパイラでのサポート
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

[コメントのネストを有効にする]

C および C++ のソース ファイルでコメントをネストさせます。標準の C ではコメントをネストすることはできないため、移植性はありません。


デフォルト値は[false]です。

メモ: 条件コンパイル指令を使用すると、コメントを含む大きなコード ブロックを "コメント化" することができます。

 #if 0
 // ...
 /* ... */
 #endif
YesC++11Feature.png
YesC++11Feature.png

[識別子の長さ]

識別子の中の有効文字数(コンパイラで識別される先頭からの文字数)を指定します。C++ が識別する長さには制限がありませんが、それ以外ではすべての識別子は、最初の有効文字数がユニークであれば別個の識別子として扱われます。識別子には、変数、プリプロセッサ マクロ名、構造体メンバ名があります。

長さの値として有効なものは 0 および 8 ~ 250 です。0 を入力すると、識別子の長さの上限である 250 が設定されたものとみなされます。Appmethod C++ のデフォルトでは、識別子ごとに 250 文字(バイト)までを使用します。UNIX コンパイラも含めた他のシステムでは、8 文字までしか認識しないものが数多くあります。このような環境へ移植するときは、識別される文字数を少なくしてコンパイルした方がよい場合もあります。この方法でコンパイルすれば、長い識別子の中に指定した文字数の範囲内で名前の重複がないかをチェックできます。デフォルト値は[250]です。

YesC++11Feature.png
YesC++11Feature.png

[文字列]オプション

[文字列]オプション 説明 コンパイラでのサポート
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

[重複文字列をマージ]

2 つのリテラル文字列の一方が他方と一致する場合、2 つをマージします。これにより、プログラムは小さくなりますが(コンパイル時間が少し長い)、一方の文字列を修正するとエラーになることがあります。
デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png

[読み取り専用文字列]

文字列を読み取り専用データ セグメントに挿入します。デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png

[書き込み可能な文字列]

文字列を書き込み可能なデータ セグメントに挿入します。
デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png

関連項目