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

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

Nov 20, 2024 am 02:42 AM

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Mar 03, 2025 pm 05:52 PM

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Gulc: Cibliothèque C construite à partir de zéro Gulc: Cibliothèque C construite à partir de zéro Mar 03, 2025 pm 05:46 PM

Gulc: Cibliothèque C construite à partir de zéro

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS Mar 03, 2025 pm 05:53 PM

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Mar 03, 2025 pm 05:53 PM

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Où est la valeur de retour de la fonction de langue C stockée en mémoire? Où est la valeur de retour de la fonction de langue C stockée en mémoire? Mar 03, 2025 pm 05:51 PM

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Utilisation distincte et partage de phrases Utilisation distincte et partage de phrases Mar 03, 2025 pm 05:51 PM

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Mar 12, 2025 pm 04:52 PM

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?

Comment fonctionne la bibliothèque de modèle standard C (STL)? Comment fonctionne la bibliothèque de modèle standard C (STL)? Mar 12, 2025 pm 04:50 PM

Comment fonctionne la bibliothèque de modèle standard C (STL)?

See all articles