Maison >développement back-end >C++ >Pourquoi une fonction C sans instruction « return » explicite se compile-t-elle sans erreur ?
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); }
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]
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
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!