Problème :
Un développeur a rencontré un comportement inattendu lors de l'utilisation d'une version de g pour Windows obtenu grâce à Strawberry Perl. Le compilateur g leur a permis d'omettre une instruction return dans une fonction non vide, même si la fonction renvoie une structure.
Analyse approfondie :
L'extrait de code fourni :
struct boundTag Box::getBound(int side) { struct boundTag retBoundTag; retBoundTag.box = this; switch (side) { // set retBoundTag.bound based on value of "side" } }
Dans une fonction non vide comme celle-ci, l'omission de l'instruction return conduit à un comportement indéfini. La norme ISO C -98 précise que :
S'écouler à la fin d'une fonction équivaut à un retour sans valeur ; cela entraîne un comportement non défini dans une fonction de retour de valeur.
Pourquoi a-t-il été compilé sans avertissements ?
Lorsque l'omission de l'instruction return n'est pas définie comportement, certains compilateurs peuvent ne pas émettre d'avertissements par défaut. Pour activer des avertissements plus approfondis, il est recommandé d'utiliser l'option -Wall lors de la compilation.
Conséquences de l'omission de l'instruction Return
Omission de l'instruction return dans un non- la fonction void peut avoir des conséquences imprévisibles. La fonction peut renvoyer des valeurs non initialisées ou provoquer le crash du programme. De plus, l'utilisation de la valeur renvoyée dans le code suivant peut conduire à des résultats inattendus.
Conclusion
Bien que le compilateur g ait autorisé l'omission d'une instruction return dans ce cas, il est crucial d'adhérer à la norme ISO C et de toujours inclure une instruction return dans les fonctions non vides. L'omission de l'instruction return peut entraîner un comportement indéfini et des conséquences imprévisibles.
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!