Partager via


Erreur du compilateur C3068

'function' : une fonction 'nu' ne peut pas contenir d’objets qui nécessiteraient un déroulement si une exception C++ s’est produite

Le compilateur n’a pas pu effectuer le déroulement de la pile sur une fonction nue qui a levé une exception, car un objet temporaire a été créé dans la fonction et la gestion des exceptions C++ (/EHsc) a été spécifiée.

Pour résoudre cette erreur, effectuez au moins l’une des opérations suivantes :

  • Ne pas compiler avec /EHsc.

  • Ne marquez pas la fonction comme naked.

  • Ne créez pas d’objet temporaire dans la fonction.

Si une fonction crée un objet temporaire sur la pile, si la fonction lève une exception et si la gestion des exceptions C++ est activée, le compilateur nettoie la pile si une exception est levée.

Lorsqu’une exception est levée, le compilateur a généré du code, appelé prolog et épilogue et qui ne sont pas présents dans une fonction nue, est exécuté pour une fonction.

Exemple

L’exemple suivant génère l’erreur C3068 :

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

void b(A){}

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