Partilhar via


Erro do compilador C3068

'função' : uma função 'nua' não pode conter objetos que exigiriam desenrolamento se ocorresse uma exceção C++

Observações

O compilador não pôde executar o desenrolamento de pilha numa função naked que levantou uma exceção porque um objeto temporário foi criado na função e o mecanismo de tratamento de exceções C++ (/EHsc) foi especificado.

Para resolver esse erro, siga pelo menos um destes procedimentos:

  • Não compile com /EHsc.

  • Não marque a função como naked.

  • Não crie um objeto temporário na função.

Se uma função cria um objeto temporário na pilha, se a função lança uma exceção e se o tratamento de exceções C++ está habilitado, o compilador limpará a pilha se uma exceção for lançada.

Quando uma exceção é lançada, o código gerado pelo compilador, chamado prolog e epilog, que não estão presentes numa função naked, é executado durante a execução de uma função.

Example

O exemplo a seguir gera C3068:

// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
   A(){}
   ~A(){}
};

void b(A){}

__declspec(naked) void c() {
   b(A());   // C3068
}