Maison >développement back-end >C++ >Pourquoi les compilateurs C traitent-ils différemment les fonctions non nulles sans retours explicites ?
Tolérance du compilateur d'une fonction qui ne renvoie pas de valeur
En C , une fonction non vide est censée renvoyer une valeur. Cependant, dans certains scénarios, une fonction peut sembler ne pas renvoyer de valeur, ce qui soulève des questions sur son comportement.
Comportement observé
L'extrait de code fourni déclare un non -fonction void, Min, qui ne renvoie pas explicitement de valeur. Au lieu de cela, il met à jour un paramètre de référence, out, avec le résultat souhaité.
Conformité à la norme
Selon le projet de norme C 11, ne pas fournir de valeur de retour dans un la fonction non vide constitue un comportement indéfini. Cela signifie que le compilateur n'est pas obligé d'émettre une erreur ou un avertissement, car il peut être difficile de déterminer avec précision l'intention dans tous les cas.
Comportement du compilateur
Malgré En raison de l'ambiguïté de la norme, certains compilateurs comme GCC et Clang peuvent émettre des avertissements avec l'indicateur -Wall, signalant un problème potentiel. En exploitant l'indicateur -Werror=return-type, ces avertissements peuvent être convertis en erreurs.
Comportement de Visual Studio
Dans Microsoft Visual Studio, code similaire à celui fourni L'extrait de code générerait une erreur (C4716) par défaut, ce qui imposerait l'attente selon laquelle les fonctions non vides devraient renvoyer un valeur.
Alerte de comportement non défini
Il est important de noter qu'il n'est pas recommandé de s'appuyer sur un comportement non défini. Alors que certains compilateurs peuvent fournir des avertissements ou des erreurs, d'autres peuvent simplement ignorer le problème, conduisant potentiellement à une exécution inattendue ou erronée du programme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!