Maison > développement back-end > C++ > Pourquoi mon compilateur C g compile-t-il une fonction sans instruction Return, même s'il renvoie une structure ?

Pourquoi mon compilateur C g compile-t-il une fonction sans instruction Return, même s'il renvoie une structure ?

Susan Sarandon
Libérer: 2024-11-27 03:36:13
original
822 Les gens l'ont consulté

Why Does My C   g   Compiler Compile a Function Without a Return Statement, Even Though It Returns a Structure?

Omission de l'instruction Return en C

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"
    }
}
Copier après la connexion

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!

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