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 :

comment utiliser goto et return


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut comment utiliser goto et return
    Bonjour, .
    Dans le code ci-dessous, dès que err < 1 je dois retourner -1. Est ce que l'écriture correcte ? En effet, je travaille sous emacs et return -1 est aligné avec print_error() automatiquement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if ( err < 1 ){
         switch(err){
              case ERR1:
                  goto fail;
              case ERR2:
                 goto fail:
              ...
         }
    fail;
        get_error( );
        print_error();
     
        return -1;
    }
    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Je passe peut être à coté de quelque chose mais pourquoi tu ne fais pas tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (err<1) return -1;
    Après les fonctions get_error() et print_error() n'existent pas à ma connaissance en C donc j'imagine que ce sont des fonctions de ton programme, auquel cas tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (err<1){
        get_error();
        print_error();
        return -1;
    }
    Edit : sinon par rapport à ta question sur l'utilisation de goto et return,

    "goto etiquette" fait un saut jusqu'à l'emplacement de cette etiquette dans ton code.

    "return variable" permet de sortir d'une fonction de type autre que void, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int mafonction(){
        int a;
        scanf("%d", &a);
        return a;
    }

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    Bonjour, .
    Dans le code ci-dessous, dès que err < 1 je dois retourner -1. Est ce que l'écriture correcte ? En effet, je travaille sous emacs et return -1 est aligné avec print_error() automatiquement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if ( err < 1 ){
         switch(err){
              case ERR1:
                  goto fail;
              case ERR2:
                 goto fail:
              ...
         }
    fail;
        get_error( );
        print_error();
     
        return -1;
    }
    Merci d'avance.
    Bonjour

    Plusieurs points ...

    • Utilise la balise "code" (#) pour mettre ton code dans un cadre..


    • utiliser GoTo c'est mal

      Le même code sans GoTo :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      if ( err < 1 ){
          Fail = 0 ;
           switch(err){
                case ERR1:
                    Fail = 1 ;
                    break ;
                case ERR2:
                   Fail = 1 ;
                   break ;
                ...
           }
      if ( Fail != 0 )
      {
          get_error( );
          print_error();
      }
       
          return -1;
      }
      L'utilisation du GoTo est à proscrire.... Il n'y a que de très rares cas où c'est nécessaire, mais dans 99.999999999999% des cas, c'est à éviter comme la peste... Cela amène invariablement à du code "spaghetti"...

      D'autre part, je ne vois pas pourquoi rajouter un if (fail) alors que tu es dans le cas où err < 1....



    • Il manque une accolade (du if)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Un label se termine par deux points, pas par un point-virgule :

  5. #5
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Regarde également dans ton switch, tu finis un cas par un : et pas par un ;

    Bref attention aux caractères qui se ressemblent mais ne s'assemblent pas
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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