IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Erreur de type warning: control may reach end of non-void function [-Wreturn-type]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Novembre 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Novembre 2018
    Messages : 1
    Par défaut Erreur de type warning: control may reach end of non-void function [-Wreturn-type]
    Bonjour,

    Une partie de mon programme (puissance 4 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    unsigned int placerJeton(int numJoueur, unsigned int numCol, unsigned int tabl[TAILLE][TAILLE]) 
    {
    	for(int i=0; i<TAILLE; i++)
        {
    		if(tabl[TAILLE-1-i][numCol-1] == 0)
            {
    			tabl[TAILLE-1-i][numCol-1] = numJoueur;
    			return 0;
    		}
    	}
    }
    Apres avoir compiler mon prgm en gcc un warnig apparait me disant :
    warning: control may reach end of non-void function [-Wreturn-type]
    }

    Comment je pourrais résoudre ce problème svp?

  2. #2
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Le prototype de ta fonction étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int placerJeton(int numJoueur, unsigned int numCol, unsigned int tabl[TAILLE][TAILLE])
    ta fonction doit renvoyer un "unsigned int".

    Or, elle ne le fait que lorsque la condition if contenue dans la boucle for est vraie, en sortant de façon anticipée de la fonction avec un "return 0;" et elle ne le fait pas si la fonction s'exécute jusqu'à la fin sans que la condition ne soit vérifiée.

    Pour faire taire l'avertissement, il te suffit de décider quel entier non signé doit renvoyer la fonction dans le cas où l'exécution arrive à la fin de ta fonction, disons par exemple 1, en mettant un juste avant l'accolade fermante de fin de ta fonction.

    Note cependant que si tu veux tester la résultat de la fonction placerJeton dans la fonction appelante, et que la valeur retournée est sensée indiquer si un jeton a pu, ou non, être placé, le choix de "return 0;" comme tu le fais dans le cas où le test est vérifié et qu'un jeton est placé prête à confusion, en effet, en C une expression évaluée à 0 dans un test signifiera "faux" et toute autre valeur valeur signifiera "vrai".

    En revanche, avec des valeurs de retour plus conventionnelles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unsigned int placerJeton(int numJoueur, unsigned int numCol, unsigned int tabl[TAILLE][TAILLE])
    {
        for(int i=0; i<TAILLE; i++)
        {
            if(tabl[TAILLE-1-i][numCol-1] == 0)
            {
                tabl[TAILLE-1-i][numCol-1] = numJoueur;
                return 1;
            }
        }
        return 0;
    }
    Tu pourras écrire des choses comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if (placerJeton(joueur1, 2, tabl))
            printf("J'ai pu placer le jeton\n");
        else
            printf("Erreur : je n'ai pas pu placer le jeton\n");
    Il est aussi d'usage, en C, pour les fonctions qui retournent des valeurs interprétables comme "vrai" ou "faux" de les nommer explicitement en les précédant de "is", par exemple : "isPlaceAvaliable()" pourrait être utilisé pour une fonction qui vérifie si un emplacement est disponible. Cependant, dans ton cas, la fonction ferait deux choses : elle placerait le jeton si c'est possible et retournerait si elle a réussi ou pas, alors ta décision d'utiliser un verbe d'action peut aussi se justifier.

    Quelques soient ta décision et ta motivation, il te faudra documenter le fonctionnement de ta fonction dans ton code.

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 773
    Par défaut
    Citation Envoyé par -Eks- Voir le message

    En revanche, avec des valeurs de retour plus conventionnelles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int placerJeton(int numJoueur, unsigned int numCol, unsigned int tabl[TAILLE][TAILLE])
    Et pourquoi ne pas utiliser le type bool, qui existe depuis le c99 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdbool.h>
     
    bool placerJeton(int numJoueur, unsigned int numCol, unsigned int tabl[TAILLE][TAILLE])
    {
        for(int i=0; i<TAILLE; i++)
        {
            if(tabl[TAILLE-1-i][numCol-1] == 0)
            {
                tabl[TAILLE-1-i][numCol-1] = numJoueur;
                return true;
            }
        }
        return false;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] Erreur de type Warning: require_once
    Par Devoe dans le forum Langage
    Réponses: 3
    Dernier message: 11/02/2016, 10h06
  2. control reaches end of no-void function
    Par membreComplexe12 dans le forum C++
    Réponses: 7
    Dernier message: 22/01/2011, 22h28
  3. [MySQL] Erreur de type: Warning: move_uploaded_file
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/11/2010, 12h42
  4. warning: control reaches end of non-void function
    Par loisir1976 dans le forum Débuter
    Réponses: 4
    Dernier message: 22/09/2009, 10h54
  5. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo