[C++ コンパイラ|互換性]

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

[C++ コンパイラ]プロジェクト オプション への移動


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

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

このダイアログ ボックスの各オプションにより、以前のバージョンのコンパイラと下位互換性が維持されます。一般に、これらのオプションは、このような互換性を必要とする場合にのみ[True]に設定してください。通常、デフォルト値は[False]です。


オプション 説明

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

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

共通項目

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

[C++]互換性オプション

[C++]互換性オプション 説明 コンパイラ サポート
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

['低速の' 仮想ベース ポインタ]

'低速' の仮想ベース ポインタを使用します。デフォルト値は[false]です。

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

[コンストラクタのディスプレースメント]

コンストラクタのディスプレースメントをサポートします。デフォルト値は[false]です。

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

[テンプレートをメンバ関数として明示的に特化]

テンプレートをメンバ関数として明示的に特化します。デフォルト値は[false]です。

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

[古い形式の Borland クラス レイアウト]

これは、下位互換用のスイッチで、C++ コンパイラが、Appmethod C++ の古いバージョンと同じ方法で、派生クラスのレイアウトを実行します。Appmethod C++ の古いバージョンを使うソース ファイルをコンパイルする必要がある場合(再コンパイルできない DLL、およびクラス レイアウトがハードコードされている古いデータ ファイルがある場合など)は、このオプションを有効にします。デフォルト値は[false]です。

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

[古い形式のクラス引数]

古い形式のクラス引数をサポートします。デフォルト値は[false]です。

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

[古い形式の明示的なテンプレート特化]

古い形式の明示的なテンプレートの特化を許可します。デフォルト値は[false]です。

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

[古い形式の virdef 生成]

古い形式の virdef 生成を使用します。デフォルト値は[false]です。

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

[最初に 'this' をプッシュ]

Pascal と同様に、'this' を最初にプッシュします。このコンパイラは通常、右のパラメータからスタックにプッシュします。デフォルト値は[false]です。

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

[VC++ との互換性]

Microsoft Visual C++ との互換性を維持します。つまり __fastcall の呼び出し規約に対して __msfastcall を代用します。VCL アプリケーションを作成する場合は、このオプションを使用しないでください。リンカ エラーが大量に発生する原因となります。デフォルト値は[false]です。

YesC++11Feature.png

[VTable を先頭に配置]

オブジェクト レイアウトの先頭に仮想テーブル ポインタを置きます。デフォルト値は[false]です。

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

[ゼロ長の空の基底クラス]

通常、データ メンバが定義されていないクラスでも、サイズは 1 バイトです。このオプションを設定すると、コンパイラは、このような使用されていないバイトを、メモリ レイアウトにおいても、すべての派生クラスのサイズを合計する場合においても無視します。基底クラスが空の場合は、派生クラスではスペースを消費しません。デフォルト値は[false]です。

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

[ゼロ長の空のクラス メンバ関数]

通常、クラス定義のデータ メンバのサイズは、最小で 1 バイトです。このオプションを有効にすると、空の構造体の長さを 0 にできます。デフォルト値は[false]です。

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

[全般]オプション

[全般]オプション 説明 コンパイラ スイッチ
bcc32 bcc64 bccosx bcciosarm bcciosarm64 bccaarm

[下位互換性]

下位互換性に関するすべての互換性 オプションを有効にします。デフォルト値は[false]です。

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

[字句ダイグラフの走査を無効にする]

字句ダイグラフの走査を無効にします。ダイグラフとは連続する 2 文字で、一部のキーボードで入力が難しい単一文字に代わるものです。このオプションが[true]の場合、ダイグラフが認識されなくなります。デフォルト値は[false]です。

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

[参照への参照をただの参照に変換しない]

参照への参照は不正とみなされていました。新しいデフォルトの動作は、C++0x のルールに従います。コンパイラにより、参照への参照は参照に変換されるようになりました。

以下に例を示します。

typedef int & intr;
typedef intrr &;

intrr 型は有効で、新しい C++ のルールでは intr と同じ型です。Bcc32(Rev. 6.0 以上)ではデフォルトでこれらのルールに従います。以前の C++ のルールでは、intrr は無効です。[参照への参照をただの参照に変換しない]オプションを有効にすると、intrr は、以前と同じようにエラーとして報告されます。

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

[呼び出し規約をマングルしない]

このオプションを設定すると、違いがコード生成オプションに互換性がないという点だけである関数については、コンパイラで関数名は区別されません。たとえば、このオプションを設定にすると、リンカでは、__fastcall メンバ関数に対する呼び出しが cdecl 呼び出し規約で行われるかどうかを検出しません。このオプションは下位互換性のためだけにあります。このオプションにより、再コンパイルできない過去のライブラリ ファイルをリンクできます。デフォルト値は[false]です。

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

[すべての互換性オプションを有効にする]

古いコードの作成時によく使用した互換性オプションを有効にします。

  • '['低速の' 仮想ベース ポインタ]
  • [古い形式のクラス引数]
  • [最初に 'this' をプッシュ]
  • [VTable を先頭に配置]
  • [コンストラクタのディスプレースメント]
  • [for 文のスコーピング]
  • [ゼロ長の空のクラス メンバ関数]

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

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

[新しい演算子名を有効にする]

'and'、'or'、'and_eq'、'bitand' などの新しい演算子名を有効にします。デフォルト値は[false]です。

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

[for 文のスコーピング]

for ループ式で宣言された変数のスコープを指定します。次のコード例の出力は、このオプションの設定によって変わります。

int main(void)
{
  for(int i=0; i<10; i++)
  {
    cout << "Inside for loop, i = " << i << endl;
  }     // for ループ ブロックの終わり
  cout << "Outside for loop, i = " << i << endl; // このオプションがなければエラー
}      // for ループを含むブロックの終わり

このオプションを無効にすると(デフォルト)、処理が for ループの終わりに達すると変数 i がスコープからはずれます。このため、このオプションを無効にしてこのコードをコンパイルすると、「未定義のシンボル」コンパイル エラーになります。

[for 文のスコーピング]オプションを有効にすると、処理が for ループを含むブロックの終わりに達すると変数 i がスコープからはずれます。この場合、コード出力は次のようになります。

Inside for loop, i = 0
...
Outside for loop, i = 10

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

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

[セグメント内のグローバル関数]

すべてのグローバル関数を独自の仮想/弱セグメントに生成します。
デフォルト値は[true]です。

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

[Microsoft のヘッダー検索アルゴリズム]

Microsoft 検索アルゴリズムを使ってヘッダー ファイルを探します。
デフォルト値は[true]です。

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

[MBCS にはネイティブ コードを生成]

マルチバイト文字に対して Unicode ではなくネイティブ コードを生成します。
デフォルト値は[false]です。

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

[const オブジェクトに対する 非 const 呼び出し]

const オブジェクトの非 const メンバ関数を呼び出せるようにします。
デフォルト値は[false]です。

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

[非 const 参照のバインディング]

非 const 参照のバインディングを許可します。
デフォルト値は[false]です。

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

[非 const 文字列リテラル]

文字列リテラルを 'const' として扱いません。
デフォルト値は[false]です。

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

[テンプレートでは古い 'using' ルールに準拠]

テンプレート内の 'using' に古い Borland ルールを適用します。
デフォルト値は[false]です。

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

[以前の 8.3 形式でのインクルード ファイル検索]

古い 8.3 形式の検索アルゴリズムを用いてヘッダー ファイルを探します。
デフォルト値は[false]です。

YesC++11Feature.png

[古い形式のオーバーロード解決]

古いオーバーロード解決ルールを使用します。
デフォルト値は[false]です。

YesC++11Feature.png

[古いタイプ ルールを三項演算子に適用する]

Borland の古いタイプ ルールを三項演算子に適用します。
デフォルト値は[false]です。

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

[複数文字定数の順序を逆転]

コンパイラは、複数文字定数の順序を逆転します。
デフォルト値は[false]です。

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

BCC32/BCCOSX 用 -Vb コンパイラ オプション

メモ: 互換性オプションには、-Vb で始まる BCC32/BCCOSX 用コンパイラ スイッチを持つものが複数あります。BCC64 では、これらの互換性オプションをサポートしていません。-Vb 互換性オプションを次の表にまとめます。

コマンドライン スイッチ 意味

-Va

古い形式のクラス引数をサポートします。

-Vb

すべての -Vb スイッチをオンにします。バージョン 5.8.2 以前の Bcc との下位互換性を有効にします。

-Vb+

すべての -Vb スイッチをオンにします。

-Vb-

すべての -Vb スイッチをオフにします。

-Vb.

すべての -Vb スイッチをリセットしてデフォルト値にします。コマンドラインでのみ使用可能です。IDE では使用できません。

-Vbc

参照への参照をただの参照に変換せず、修飾参照を許可します。

-Vbe

古い形式の明示的なテンプレートの特化を許可します。

-Vi

古い 8.3 形式のアルゴリズムを用いてヘッダー ファイルを探します。

-Vbn

const/volatile オブジェクトの非 const/非 volatile メンバ関数の呼び出しを許可します。

-Vbo

Borland の古いオーバーロード解決ルールを使用します。

-Vbr

Borland の古い参照バインディング規則を有効にします。

-Vbs

文字列リテラルを非 const として扱います。

-Vbt

Borland の古いタイプ ルールを三項演算子に適用します。

-Vbu

テンプレート内の 'using' に古い Borland ルールを適用します。

-Vbx

テンプレートをメンバ関数として明示的に特化します。

関連項目