8.40 --cpp_compat

バイナリ互換性を最大限に高めるように C++ コードをコンパイルします。

使用法

C++ 03 でコンパイルされたソースコードとの互換性を最大限に高める機能のサブセットを使用する C++11 ソースコードをコンパイルするには、--cpp11 --cpp_compat を使用します。
古いコンパイラバージョンでコンパイルされた C++03 コードとのバイナリ互換性を最大限に高める C++03 ソースコードをコンパイルするには、--cpp --cpp_compat を使用します。
--cpp11 --cpp_compat オプションの動作は、以下のような制約はありますが、--cpp11 と同じです。
  • --exceptions オプションが選択された場合、コンパイル時に知られていなかった長さを持つ配列 new 演算子は、境界チェックを実行しません。つまり、エラーがある場合、std::bad_array_new_length ではなく std::bad_alloc がスローされます。
  • --exceptions オプションが選択された場合、デリゲートコンストラクタの言語機能は無効になります。--cpp_compat が選択された状態で、デリゲートコンストラクタを使用すると、エラーメッセージが表示されます。
armcc は、最終リンク手順を実行するために armlink を呼び出す場合、--cpp_compat オプションを armlink に渡します。
--cpp_compat オプションと他のソース言語のコマンドラインオプションを組み合わることができます。以下に例を示します。
  • armcc --cpp_compat --cpp11
  • armcc --cpp_compat --cpp
  • armcc --cpp_compat --cpp --gnu

サンプル

--cpp11 --exceptions でコンパイルすると、コードは std::bad_array_new_length を把握できます。
void variable_length_array_new(unsigned i) {
    bool exception_thrown = false;
    try {
        new int[i + 0x40000000];
    } catch (std::bad_array_new_length e)
}
--cpp11 --cpp_compat --exceptions でコンパイルすると、コードは std::bad_alloc のみを把握できます。
void variable_length_array_new_cpp_compat(unsigned i) {
    bool exception_thrown = false;
    try {
        new int[i + 0x40000000];
    } catch (std::bad_alloc e)
}

デフォルト

デフォルトでは、--cpp_compat オプションは有効ではありません。
接尾辞が .cpp.cxx.c++.cc.CC のいずれかのファイルの場合、デフォルトで --cpp オプションが適用されます。
関連する参考文書
8.23 --c90
8.24 --c99
8.92 --gnu
8.38 --cpp
8.176 --strict、--no_strict
8.39 --cpp11
1.2 コンパイラのソース言語モード
2.7 コンパイラで認識されるファイル名の接尾文字
11.13 C++11 でサポートされている機能
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.