Compartir a través de


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
};