Compartilhar via


Erro do compilador C3068

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

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

Para resolver esse erro, siga um ou mais dos seguintes 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 criar um objeto temporário na pilha, se a função gerar uma exceção e se o tratamento de exceção C++ estiver habilitado, o compilador limpará a pilha se uma exceção for lançada.

Quando uma exceção for gerada, o código gerados pelo compilador, chamado de prólogo e epílogo (que não estão presentes em uma função naked), é executado para uma função.

Exemplo

O seguinte exemplo gera o erro C3068:

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

void b(A){}

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