Partager via


Mélange C (structuré) et exceptions C++

Si vous souhaitez écrire du code plus portable, à l'aide de la gestion structurée des exceptions dans un programme C++ n'est pas recommandé.Toutefois, vous pouvez parfois souhaiter compiler avec /EHa et associer des exceptions structurées et code source C++, vous avez besoin d'une fonctionnalité pour gérer ces deux types d'exceptions.Étant donné qu'un gestionnaire d'exceptions structuré n'a aucun concept des objets ou des exceptions typées, il ne peut pas gérer les exceptions levées par du code C++ ; toutefois, les gestionnaires catch C++ peuvent gérer les exceptions structurées.Fondamentalement, la syntaxe de gestion des exceptions C++ (test, throw, Catch) n'est pas être acceptée par le compilateur C, mais la syntaxe de gestion structurée des exceptions (__try, __except, __finally) est prise en charge par le compilateur C++.

Consultez _set_se_translator pour plus d'informations sur la gestion des exceptions structurées comme exceptions C++.

Si vous combinez des exceptions structurées et C++, notez les éléments suivants :

  1. Des exceptions C++ et les exceptions structurées ne peuvent pas être mélangées dans la même fonction.

  2. Les gestionnaires de terminaisons (blocs d'__finally ) sont toujours exécutés, même pendant un déroulement après qu'une exception soit levée.

  3. La gestion des exceptions C++ peut intercepter et conserver les sémantiques de déroulement dans tous les modules compilés avec l'option du compilateur de /EH (cette option active les sémantiques de déroulement).

  4. Il peut y avoir des situations dans lesquelles les fonctions de destructeur ne sont pas appelées pour tous les objets.Par exemple, si une exception structurée se produit lors d'une tentative de l'appel d'une fonction par l'intermédiaire d'un pointeur fonction non initialisée, et les entreprises pour cette fonction comme objets de paramètres ayant été construits avant l'appel, ces objets n'auront pas leurs destructeurs appelés pendant le déroulement de pile.

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?

Voir aussi

Référence

Gestion des exceptions C++