Error del compilador C3068
'función': una función 'naked' no puede contener objetos que requerirían desenredo si se produjera una excepción de C++
El compilador no ha podido desenredar la pila en una función naked que ha producido una excepción, porque se ha creado un objeto temporal en la función y se ha especificado el control de excepciones de C++ (/EHsc).
Para resolver este error, realice al menos una de las siguientes acciones:
No use /EHsc en al compilación.
No marque la función como
naked
.No cree un objeto temporal en la función.
Si una función crea un objeto temporal en la pila, si la función produce una excepción y si el control de excepciones de C++ está habilitado, el compilador limpia la pila si se produce una excepción.
Cuando se produce una excepción, el código generado por el compilador (denominado prólogo y epílogo, que no están presentes en una función naked) se ejecuta para una función.
Ejemplo
El ejemplo siguiente genera el error C3068:
// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
A(){}
~A(){}
};
void b(A){}
__declspec(naked) void c() {
b(A()); // C3068
};