Maison > développement back-end > C++ > le corps du texte

Pourquoi l'omission d'une instruction Return dans une fonction C non nulle fonctionne-t-elle parfois (et pourquoi cela ne devrait pas) ?

Mary-Kate Olsen
Libérer: 2024-11-20 02:42:01
original
728 Les gens l'ont consulté

Why Does Omitting a Return Statement in a Non-Void C   Function Sometimes Work (and Why It Shouldn't)?

Omission de l'instruction Return en C

En C , il est d'usage de terminer une fonction non vide avec une instruction return. Cependant, un événement étrange a été observé dans une version Windows spécifique de g distribuée avec Strawberry Perl. Cette version permet l'omission d'une instruction return dans les fonctions qui renvoient une valeur non vide, conduisant à un comportement inattendu.

Considérez la fonction membre suivante :

struct boundTag Box::getBound(int side) {
    struct boundTag retBoundTag;
    retBoundTag.box = this;
    switch (side)
    {
        // set retBoundTag.bound based on value of "side"
    }
}
Copier après la connexion

Cette fonction est conçue pour renvoie une structure représentant les balises liées. Cependant, le développeur a omis par inadvertance l'instruction return :

// ... code from above
}
Copier après la connexion

Lors du test de cette fonction, le développeur a reçu une sortie valide malgré l'instruction return manquante. Même après avoir supprimé l'instruction return, le code se compile sans aucun avertissement.

Le problème sous-jacent est que l'omission de l'instruction return dans une fonction non vide appelle un comportement indéfini. La norme ISO C -98 indique explicitement que le fait de découler de la fin d'une fonction non vide équivaut à un retour sans valeur, ce qui entraîne un comportement indéfini.

// ... code from above
// Undefined behavior
}
Copier après la connexion

Dans ce scénario, g renvoie probablement un valeur poubelle car le compilateur ne peut pas déterminer la valeur de retour prévue. L'utilisation de cette valeur renvoyée dans votre code est dangereuse et peut conduire à des résultats imprévisibles.

Bien que g ne puisse pas émettre d'avertissement par défaut, l'utilisation de l'option -Wall lors de la compilation oblige le compilateur à avertir de ces cas. Cette option mettra en évidence l'instruction return manquante et aidera à éviter un tel comportement indéfini.

Par conséquent, il est essentiel de toujours inclure une instruction return dans les fonctions non vides, même si la valeur de retour n'est pas utilisée immédiatement. Cette pratique garantit que le code est conforme au standard C et évite tout comportement potentiel non défini.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal