noreturn

Section spécifique à Microsoft

L’attribut __declspec indique au compilateur qu’une fonction ne retourne pas. Le compilateur sait ensuite que le code suivant un appel à une __declspec(noreturn) fonction est inaccessible.

Si le compilateur recherche une fonction avec un chemin d’accès au contrôle qui ne retourne pas de valeur, il génère un avertissement (C4715) ou le message d’erreur (C2202). Si le chemin du contrôle ne peut pas être atteint en raison d’une fonction qui ne retourne jamais, utilisez __declspec(noreturn) cette option pour empêcher cet avertissement ou cette erreur.

Remarque

L’ajout __declspec(noreturn) à une fonction censée retourner peut entraîner un comportement non défini.

Exemple

Dans l’exemple suivant, lorsque l’argument pour isZeroOrPositive lequel l’argument est négatif, fatal est appelé. Il n’existe pas d’instruction de retour dans ce chemin de contrôle, ce qui entraîne l’avertissement C4715 que tous les chemins de contrôle ne retournent pas une valeur. La déclaration fatal en tant qu’atténuation __declspec(noreturn) de cet avertissement, ce qui est souhaitable, car il n’y a aucun point dans celui-ci depuis fatal() la fin du programme.

// noreturn2.cpp
#include <exception>

__declspec(noreturn) void fatal()
{
   std::terminate();
}

int isZeroOrPositive(int val)
{
   if (val == 0)
   {
      return 0;
   }
   else if (val > 0)
   {
      return 1;
   }
   // this function terminates if val is negative
   fatal();
}

int main()
{
   isZeroOrPositive(123);
}

FIN de la section spécifique à Microsoft

Voir aussi

__declspec
Mots clés