Est-il acceptable que les compilateurs renvoient des déchets lorsqu'une fonction déclare un type de retour non nul mais ne parvient pas à renvoyer une valeur ?
Le l'absence d'une instruction return dans une fonction avec un type de retour non vide soulève des questions sur le comportement du compilateur. Bien que le compilateur puisse sembler renvoyer des déchets dans de tels cas, ce n'est pas une solution idéale.
Pourquoi n'est-ce pas une erreur ?
En C , les fonctions sans une valeur de retour présente un comportement indéfini. Cependant, la plupart des compilateurs émettent des avertissements plutôt que des erreurs. En effet, il n'est pas toujours simple pour les compilateurs de déterminer si une fonction s'exécute réellement à la fin ou se termine via une exception.
Considérez l'exemple suivant :
int func1() { return; // error } int func2() { // does not return anything }
Dans ce cas, func2 devrait théoriquement déclencher une erreur, mais ce n'est pas le cas. En effet, le compilateur ne peut pas garantir que func2 ne se terminera pas via une exception, ce qui rend difficile la preuve qu'il s'exécute réellement à la fin de la fonction.
Pourquoi ne devrait-il pas générer une erreur ?
Contrairement aux variables non initialisées, qui posent clairement problème, l'absence de valeur de retour d'une fonction n'est pas toujours un problème. Par exemple :
int func3() { func4(); }
Si func4 lève une exception, alors la valeur de retour manquante de func3 n'a pas d'importance. Cependant, le compilateur ne peut pas toujours déterminer si func4 lancera ou non, surtout lorsqu'on considère du code compilé séparément.
En conclusion, bien que le comportement non défini de C pour les fonctions sans valeur de retour ne soit pas idéal, les compilateurs émettent généralement des avertissements plutôt que des erreurs pour éviter d'éventuels faux positifs dus à la complexité de déterminer le chemin d'exécution réel d'une fonction.
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!