編譯器錯誤 C3068
'function' :如果發生C++例外狀況,'naked' 函式不能包含需要回溯的物件
編譯程式無法在擲回例外狀況的裸體函式上執行堆疊回溯,因為已在函式中建立暫存物件,且已指定C++例外狀況處理 (/EHsc) 。
若要解決此錯誤,請至少執行下列其中一項:
請勿使用 /EHsc 編譯。
請勿將函式標示為
naked
。請勿在函式中建立暫存物件。
如果函式在堆疊上建立暫存物件,如果函式擲回例外狀況,而且如果已啟用C++例外狀況處理,則編譯程式會在擲回例外狀況時清除堆疊。
擲回例外狀況時,編譯程式產生的程式代碼會針對函式執行,稱為 prolog 和 epilog,且不存在於裸體函式中。
範例
下列範例會產生 C3068:
// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
A(){}
~A(){}
};
void b(A){}
__declspec(naked) void c() {
b(A()); // C3068
};