Maison >développement back-end >C++ >Pourquoi une fonction C se compile-t-elle sans instruction de retour explicite malgré la déclaration d'un type de retour ?

Pourquoi une fonction C se compile-t-elle sans instruction de retour explicite malgré la déclaration d'un type de retour ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-13 04:41:15853parcourir

Why Does a C   Function Compile Without an Explicit Return Statement Despite Declaring a Return Type?

Pourquoi cet extrait de code C se compile-t-il malgré l'absence d'une valeur de retour ?

Dans l'extrait de code fourni :

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a, b, out);
    out.w = min(a.w, b.w);
}

La fonction Min est déclarée comme renvoyant un tvec4, mais le code ne fournit pas d'instruction return explicite. Cela soulève la question de savoir pourquoi le compilateur compile le code sans erreur.

Comportement non défini

Selon le projet de norme C 11, découler de la fin d'une valeur -le retour de la fonction sans fournir de valeur de retour entraîne un comportement indéfini. Cela signifie que le compilateur n'est pas obligé d'émettre une erreur ou un avertissement dans de tels cas.

Options du compilateur

Cependant, les compilateurs peuvent être configurés pour avertir ou même générer des erreurs. pour un comportement indéfini. Par exemple, l'utilisation de l'indicateur -Wall peut souvent déclencher un avertissement du type :

warning: control reaches end of non-void function [-Wreturn-type]

En ajoutant l'indicateur -Werror=return-type, le compilateur traitera cet avertissement comme une erreur, forçant le code à être corrigé.

Visual Studio

Dans Visual Studio, le code générera l'erreur C4716 par défaut :

error C4716: 'Min' : must return a value

Dans les cas où tous les chemins de code ne renvoient pas une valeur, Visual Studio émettra un avertissement (C4715).

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:
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