コンパイラ エラー C3068
'function' : 'naked' 関数は、C++ 例外が発生した場合に、アンワインディングを必要とするオブジェクトを含むことはできません
関数で一時オブジェクトが作成され、C++ 例外処理 (/EHsc) が指定されたため、コンパイラは、例外をスローした naked 関数でスタック アンワインドを実行できませんでした。
このエラーを解決するには、少なくとも、次のいずれかに従ってください。
/EHsc を使用してコンパイルしないでください。
関数を
naked
とマークしないでください。関数で一時オブジェクトを作成しないでください。
関数がスタックに一時オブジェクトを作成する場合、関数が例外をスローする場合、および、C++ 例外処理が有効になっている場合、コンパイラは例外がスローされるとスタックをクリーンアップします。
例外がスローされると、プロローグおよびエピローグと呼ばれ、naked 関数には存在しないコンパイラ生成コードが関数に対して実行されます。
例
次の例では C3068 が生成されます。
// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
A(){}
~A(){}
};
void b(A){}
__declspec(naked) void c() {
b(A()); // C3068
};