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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour