Avertissement du compilateur (niveau 1) C4530
Le gestionnaire d’exceptions C++ utilisé, mais la sémantique de déroulement n’est pas activée. Spécifier /EHsc
Le code utilise la gestion des exceptions C++, mais /EHsc n’a pas été inclus dans les options du compilateur.
Notes
Le compilateur nécessite la possibilité de générer du /EHsc
code C++ qui suit la norme C++ pour la gestion des exceptions. La sémantique de déroulement C++ standard spécifie que les objets et les trames de pile construits entre l’endroit où une exception est levée et où elle est interceptée doit être détruite et leurs ressources récupérées. Ce processus est appelé déroulement de la pile.
L’option /EHsc
indique au compilateur de générer du code qui appelle les destructeurs sur des objets de stockage automatique lorsqu’une exception passe par le frame de pile conteneur. Les objets de stockage automatique sont des objets alloués sur la pile, tels que des variables locales. Il est appelé stockage automatique, car il est alloué automatiquement lorsque les fonctions sont appelées et libérées automatiquement lorsqu’elles retournent. Une trame de pile est les données placées sur la pile lorsqu’une fonction est appelée, ainsi que son stockage automatique.
Lorsqu’une exception est levée, elle peut traverser plusieurs trames de pile avant qu’elle ne soit interceptée. Ces trames de pile doivent être décodées à mesure que l’exception les traverse dans l’ordre d’appel inverse. Les objets de stockage automatique dans chaque trame de pile doivent être détruits pour récupérer leurs ressources propre ly. Il s’agit du même processus de destruction et de récupération qui se produit automatiquement lorsqu’une fonction retourne normalement.
Lorsque l’option /EHsc
n’est pas activée, les objets de stockage automatique dans les trames de pile entre la fonction de levée et la fonction dans laquelle l’exception est interceptée ne sont pas détruites. Seuls les objets de stockage automatique créés dans un try
ou catch
bloc sont détruits, ce qui peut entraîner des fuites de ressources importantes et d’autres comportements inattendus.
Si aucune exception ne peut être levée dans votre exécutable, vous pouvez ignorer cet avertissement en toute sécurité. Certains codes peuvent nécessiter d’autres options de gestion des exceptions. Pour plus d’informations, consultez /EH.
Exemple
L’exemple suivant génère l’erreur C4530 :
// C4530.cpp
// compile with: /W1
int main() {
try{} catch(int*) {} // C4530
}
Compilez l’exemple avec /EHsc
pour résoudre l’avertissement.