31

extern "C"C++ コードでしか呼び出されない場合でも、使用して宣言したい C++ 関数があります。はい、これが奇妙であることはわかっていますが、C と C++ の宣言が混在しているため、一貫性を保つためにやりたいことです。extern "C"C++ 関数を as として宣言しても、スローの動作に影響しないことを確認したいだけです。

次のようになります。

extern "C" void foo() {throw exception;}

int bar()
{
    try
    {
        foo();
    } catch (exception e) { return 1; }
}
4

4 に答える 4

8

GCC の場合、答えは決定的ではないようです。

ただし、MSVCのドキュメントは、この件に関して比較的明確です。

  • /EHaそして/EHs... extern "C" として宣言された関数が例外をスローする可能性があると想定するようにコンパイラに指示します。
  • /EHsc... extern "C" として宣言された関数が C++ 例外をスローしないと想定するようにコンパイラに指示します

したがって、Visual-C++ の場合、定義された動作が得られるかどうかはコンパイラ オプションに依存します。

于 2014-06-16T11:01:21.240 に答える