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