Maison > développement back-end > C++ > Pourquoi une fonction C sans instruction « return » explicite se compile-t-elle sans erreur ?

Pourquoi une fonction C sans instruction « return » explicite se compile-t-elle sans erreur ?

Patricia Arquette
Libérer: 2024-12-17 08:13:24
original
523 Les gens l'ont consulté

Why Does a C   Function Without an Explicit `return` Statement Compile Without Error?

Fonction renvoyant une valeur non définie en C

Dans un extrait de code qui a fait surface dans une bibliothèque, une fonction nommée Min est définie comme suit :

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}
Copier après la connexion

De façon inattendue, cette fonction se compile sans erreur même si elle ne renvoie pas de valeur, car son type de retour n'est pas explicitement déclaré comme void.

Selon le projet de norme C 11, section 6.6.3, ce comportement n'est pas défini. La norme stipule que « s'écouler à la fin d'une fonction équivaut à un retour sans valeur » et que « cela entraîne un comportement indéfini dans une fonction renvoyant une valeur ».

Dans ce scénario, le compilateur est pas obligé de fournir une erreur ou un avertissement car il peut être difficile de diagnostiquer avec précision le problème dans tous les cas.

Cependant, avec l'indicateur -Wall, GCC et Clang peuvent être invités à générer un avertissement similaire à :

warning: control reaches end of non-void function [-Wreturn-type]
Copier après la connexion

Pour convertir cet avertissement en erreur, garantissant un niveau plus élevé de qualité de code, l'indicateur -Werror=return-type peut être utilisé. De plus, les indicateurs -Wextra -Wconversion -pedantic sont recommandés pour une détection complète des erreurs.

Dans Visual Studio, le code susmentionné déclencherait l'erreur C4716 :

error C4716: 'Min' : must return a value
Copier après la connexion

Dans les cas où tout le code n'est pas les chemins renvoient une valeur, l'avertissement C4715 serait émis à la place.

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