try (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


Catégorie

Instructions, Mots clés spécifiques au C++

Syntaxe

try compound-statement handler-list

Description

Le mot clé try n'est pris en charge que dans les programmes C++. Utilisez __try dans les programmes C. C++ autorise aussi __try.

Un bloc de code dans lequel une exception peut se produire doit être préfixé par le mot clé try. A la suite du mot clé try, il y a un bloc entouré par des accolades. Cela indique que le programme est préparé à tester l'existence d'exceptions. Si une exception se produit, le flux du programme est interrompu. L'enchaînement des étapes se fait de la manière suivante :

  • Le programme recherche un gestionnaire correspondant
  • Si un gestionnaire est trouvé, la pile est déroulée jusqu'à ce point
  • Le contrôle du programme est transféré au gestionnaire

Si aucun gestionnaire n'est trouvé, le programme appelle la fonction terminate. Si aucune exception ne se produit, le programme s'exécute en mode normal.


Exemple

Le fragment de code suivant montre l'utilisation de la construction try/__finally :

#include <stdio.h>
#include <string.h>
#include <windows.h>

class Exception
{
public:
    Exception(char* s = "Unknown"){what = strdup(s);      }
    Exception(const Exception& e ){what = strdup(e.what); }
    ~Exception()                   {free(what);         }
    char* msg() const             {return what;           }
private:
    char* what;
};

int main()
{
    float e, f, g;
    try
    {
        try
        {
            f = 1.0;
            g = 0.0;
            try
            {
                puts("Another exception:");
                e = f / g;
            }
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                puts("Caught a C-based exception.");
                throw(Exception("Hardware error: Divide by 0"));
            }
        }
        catch(const Exception& e)
        {
            printf("Caught C++ Exception: %s :\n", e.msg());
        }
    }
    __finally
    {
        puts("C++ allows __finally too!");
    }
    return e;
}

L'exécution du programme ci-dessus donne le résultat suivant :

Another exception:
Caught a C-based exception.
Caught C++ exception[Hardware error: Divide by 0]
C++ allows __finally too!

Voir aussi