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 :

les branchements inconditionnels


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut les branchements inconditionnels
    bonjour chers developpeurs,
    comme le titre l'indique mon sujet portera sur les branchements inconditionels;
    j'ai fait bien sur avant de poster une petite recherche ;j'ai trouvé qu'il ya plutot 5:
    1-break
    2-goto
    3-return
    4-exit
    5-continue
    j'ai lu la definition de chacune de ces fonctions mais j'ai rien pigé en fait
    alors si vous pouvez me donnez quelques exemples avec lesquels je peux voir le réel des choses;
    mercii

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    comme le titre l'indique mon sujet portera sur les branchements inconditionnels;
    j'ai fait bien sur avant de poster une petite recherche ;j'ai trouvé qu'il ya plutot 5:
    1-break
    2-goto
    3-return
    4-exit
    5-continue
    j'ai lu la définition de chacune de ces fonctions mais j'ai rien pigé en fait
    alors si vous pouvez me donnez quelques exemples avec lesquels je peux voir le réel des choses;
    merci
    Bah, l'éducation par l'exemple a ses limites (elle ne favorise pas l'analyse et la reflexion). Il est bon de savoir apprendre en lisant un texte (il n'y aura pas toujours quelqu'un pour te tenir la main...).

    Alors quels sont les mots ou expressions que tu ne comprends pas ?

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bah, l'éducation par l'exemple a ses limites (elle ne favorise pas l'analyse et la reflexion). Il est bon de savoir apprendre en lisant un texte (il n'y aura pas toujours quelqu'un pour te tenir la main...).

    Alors quels sont les mots ou expressions que tu ne comprends pas ?
    par exemple pour goto elle est definit comme suit:branchement sur une ligne labillisée
    break:provoque la sortie immediate de la boucle ou switch
    exit:pemet de quitter le programme avec une valeur ;flush,et fermeture de fichiers
    bon les mots en rouge sont ceux que j'ai pas compris

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    par exemple pour goto elle est definit comme suit:branchement sur une ligne labiellisée
    "labellisée" Ca veut dire munie d'une étiquette (label en anglais)

    Un étiquette est un identificateur suivit de ':'.

    break:provoque la sortie immediate de la boucle ou switch
    switch-case est une des structures conditionnelles du langage C. Tu ne la connais pas ? Attention à bien lire les chapitres dans l'ordre. Quel est ton document de travail (livre, cours, site ?)
    exit:pemet de quitter le programme avec une valeur ;flush,et fermeture de fichiers
    to flush en anglais signifie 'vider', 'purger'... (to flush the toilets...)

    En informatique, ça s'applique aux données en attentes non traitées. Par exemple, l'écriture dans un fichier peut être différée. Elle est alors 'forcée' et les données se retrouvent bien dans le fichier.

    Ton document n'est pas fameux, car il mélange anglais, français et franglais...

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    vous pouvez alors m'indiquer un site la ou je peux bien comprendre l'utilité des branchements inconditionnels;merci
    @moderateurs:excusez moi pour les HS

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    vous pouvez alors m'indiquer un site la ou je peux bien comprendre l'utilité des branchements inconditionnels;merci
    @moderateurs:excusez moi pour les HS
    Ce n'est pas du tout hors-sujet.

    Les branchements inconditionnels servent à dérouter 'brutalement' l'exécution.

    Dans un switch case, 'break' permet de terminer l'exécution d'une branche. Son rôle est indispensable.

    Dans une boucle, 'break' sert à sortir de la boucle et 'continue' à retourner directement au début. C'est pas très propre comme programmation. On préfère généralement s'en tenir aux principes de la programmation structurée (toute boucle a au moins une condition de sortie). Mais ça peut faire gagner un peu de code et quelques cycles...

    Un goto sert à aller directement à une étiquette (dans les limites d'une fonction). Son rôle est contesté et va à l'encontre des principes de la programmation structurée. Il peut être utile pour simplifier certains traitements d'erreurs ou pour gagner quelques cycles (sortir directement de plusieurs boucles imbriquées.... Personnellement, je ne l'utilise quasiment jamais...

    Un return interrompt une fonction et force le retour à la fonction appelante. Autant sont rôle est naturel en fin de fonction, autant il est contesté quand il est au milieu du code. En effet, une sortie brutale peu se traduire par l'oubli de la libération de certaines ressources (mémoire, flux...) qui pourraient entrainer des dysfonctionnements à long terme. Certains programmes (serveurs...) tournent en 24/7..

    Un exit() interrompt complètement le processus en cours d'exécution. Il sert pour traiter de façon urgente une erreur grave. Son usage est exceptionnel.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Une petite précision: contrairement aux autres, exit n'est pas un mot-clé: C'est une fonction.
    Et comme dit par Emmanuel, son utilisation doit rester absolument exceptionnelle.
    Et encore plus en C++...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Une petite précision: contrairement aux autres, exit n'est pas un mot-clé: C'est une fonction.
    Et comme dit par Emmanuel, son utilisation doit restée absolument exceptionnelle.
    Et encore plus en C++...
    Bonjour, pourquoi est-ce que exit doit être utilisé très occasionellement ? Comme l'a dit Emmanuel dans un précédent post, il y a des appli qui tournent 24/7. Pour ma part, je développe des solveurs pour résoudre des équations (mécanique des fluides, etc...) et j'utilise exit à gogo : lorsqu'un malloc a échoué, lorsque la lecture du fichier d'input a échoué (après un sscanf par exemple), lorsqu'un fopen échoue etc...

    Plusieurs fois, j'ai lu sur ce site qu'il faut faire remonter l'erreur jusqu'au main et que seul le main peut interrompre l'exécution du programme. En quoi est-ce "mal" de l'interrompre brutalement (je répète que je ne développe pas des appli mais "seulement" des solveurs) ? Je trouve que faire remonter les erreurs jusqu'au main lorsque j'ai 3 voir 4 sous-fonctions est un peu "lourd-dingue" (pardonnez-moi de cette expression) et que donc c'est à cause de cette raison que je fais des exit dès qu'il y a une erreur avec un joli fprintf(stderr,blabla) qui explique la cause de l'arrêt.

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Plusieurs fois, j'ai lu sur ce site qu'il faut faire remonter l'erreur jusqu'au main et que seul le main peut interrompre l'exécution du programme. En quoi est-ce "mal" de l'interrompre brutalement ?
    C'est un peu une question de goût. Personnellement, je n'autorise que main() à terminer le programme, donc toute erreur doit être retournée à main(), ce qui permet au passage de fermer tous les fichiers ouverts (ce qui n'est pas forcément limité à un fclose(), mais peut aussi comprendre une compression, un déplacement...), libérer tous les blocs alloués, et autre. Certes, dans un OS moderne, les fclose() et free() sont faits automatiquement. Mais je trouve plus propre que ce soit main() qui rende la main : cela correspond bien à son rôle de "séquenceur" de l'application. Mais on peut avoir un autre avis.

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par DaZumba Voir le message
    C'est un peu une question de goût. Personnellement, je n'autorise que main() à terminer le programme, donc toute erreur doit être retournée à main(), ce qui permet au passage de fermer tous les fichiers ouverts (ce qui n'est pas forcément limité à un fclose(), mais peut aussi comprendre une compression, un déplacement...), libérer tous les blocs alloués, et autre. Certes, dans un OS moderne, les fclose() et free() sont faits automatiquement. Mais je trouve plus propre que ce soit main() qui rende la main : cela correspond bien à son rôle de "séquenceur" de l'application. Mais on peut avoir un autre avis.
    Concernant le exit, si l'on *conseille* généralement d'en restreindre l'usage (et on est bien d'accord sur le fait qu'il ne s'agit que d'un conseil... fut il "insistant" ), c'est surtout parce qu'il n'est pas rare de se rendre compte qu'une des fonctions appelantes pourrait très bien récupérer l'erreur...

    Comme la dernière fonction qui soit susceptible de récupérer l'erreur sus-citée est... la fonction main(), on estime que, si elle n'a pas été récupérée, nous arrivons bel et bien dans le cadre d'une "erreur irrécupérable", qui n'a d'autre choix que de mettre fin à l'application

    Quelques exemples tirés des tiens:

    • Un malloc échoue peut être y a-t-il moyen de libérer de la mémoire inutilement utilisée, et, partant, de faire qu'il réussisse la fois d'après
    • L'ouverture d'un fichier échoue peut être est-il tout simplement ouvert ailleurs, et on se donne l'occasion de le fermer, pour retenter l'ouverture
    • La lecture échoue peut être veut-ce seulement dire que tu as fini ton traitement

    Enfin, il faut savoir que le fait de faire "remonter" une erreur jusqu'au main permettra, sur les systèmes d'exploitation "sensibles" de s'assurer de la bonne libération des ressources utilisées par l'application (car il n'est pas strictement certain que *tous* débloquent les fichiers ouverts, ni que *tous* considéreront la mémoire utilisée par l'application comme étant à nouveau disponible )...

    @s-ehtp:Un switch permet en fait de créer ce que l'on pourrait appeler une "structure de test à choix multiple", qui envisage plusieurs valeurs possibles pour une même variable.

    Plutôt que d'écrire un code du genre de
    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
    20
    21
    22
    23
    24
    25
    26
    27
    if(mavar==1)
    {
        /*...*/
    }
    else if(mavar==2)
    {
        /*...*/
    }
    else if(mavar==3)
    {
        /*...*/
    }
    else if(mavar==4)
    {
        /*...*/
    }
    else if(mavar==5){
        /*...*/
    }
    else if(mavar==6)
    {
        /*...*/
    }
    else if(mavar==7)
    {
        /*...*/
    }
    qui devient rapidement indigeste, on préférera utiliser la syntaxe "switch (variable) case valeur: sous une forme proche de
    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
    20
    21
    22
    23
    24
    25
     
    swhitch(mavar)
    {
        case 1:
            /*...*/
            break;
        case 2:
            /*...*/
            break;
        case 3:
            /*...*/
            break;
        case 4:
            /*...*/
            break;
        case 5:
            /*...*/
            break;
        case 6:
            /*...*/
            break;
        case 7:
            /*...*/
            break;
    }
    Cela permet, entre autre, de retrouver plus facilement les valeurs testées, et il paraîtrait même que cela soit susceptible de faire gagner un peu de temps à l'exécution...

    Le mot clé break sert ici à chaque fois pour signaler "tout ce que j'avais à faire pour cette valeur a été fait, on peut continuer l'exécution du reste".

    Honnêtement, c'est le seul mot clé de ta liste, avec le return (renvoi d'une valeur à la fonction qui a appelé la fonction dans laquelle on se trouve), que j'utilise régulièrement, et uniquement dans le cas expliqué

    Il faut savoir que, si tu utilise une *bonne* méthode d'algorithmie structurée (ce qui signifie surtout: si tu as suffisemment réfléchi à la logique que tu veux faire exécuter par ton programme avant de commencer à le coder), tu n'aura pour ainsi dire jamais besoin d'avoir recours à goto ou continue.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Une petite précision: contrairement aux autres, exit n'est pas un mot-clé: C'est une fonction.
    Et comme dit par Emmanuel, son utilisation doit restée absolument exceptionnelle.
    Et encore plus en C++...
    salut tout le monde
    j'aimerais bien que vous m'expliquiez ce que c'est un mot clé
    j'ai pas aussi compris le mot 7/24
    et le mot solveur

    et merci
    NB:vous avez utiliser des mots que j'ai pas encore renconté parce que je suis une debutante ;mais c'est vraiment interessant d'avoir des idées

  12. #12
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    je voulais aussi savoir ce que c'est un branchement

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    salut tout le monde
    j'aimerais bien que vous m'expliquiez ce que c'est un mot clé
    j'ai pas aussi compris le mot 7/24
    et le mot solveur

    et merci
    NB:vous avez utiliser des mots que j'ai pas encore renconté parce que je suis une debutante ;mais c'est vraiment interessant d'avoir des idées
    Hum... on va bien bas dans le "B-A BA"...
    Un "mot clef" est un mot de base du langage, un mot qui est directement compris comme un ordre précis.

    7/24 => 7 jours sur 7, 24h sur 24 => se dit d'un truc tellement primordial qu'on ne peut pas l'arrêter => vaut mieux qu'il soit hyper sécure

    solveur ("to solve" en anglais = "résoudre" en français) => outil permettant de résoudre un problème

    Citation Envoyé par s-ehtp Voir le message
    je voulais aussi savoir ce que c'est un branchement
    Branchement => Le code ne se déroule plus séquentiellement ou de façon structurée car on lui dit de continuer ailleurs (avec un "break" ou un "goto" par exemple)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par s-ehtp Voir le message
    j'ai pas aussi compris le mot 7/24
    C'est 24/7 : 24h par jour, 7 jours sur 7

  15. #15
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Une petite précision: contrairement aux autres, exit n'est pas un mot-clé: C'est une fonction.
    On a eu une surprise un jour, en reprenant du vieux code de chez nous, yavait des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (test)
    {
      printf("message\n");
      exit;
    }
    qui trainaient.
    Ce code compile (du moins avec gcc 3) car en fait "exit" tout seul est évalué comme le pointeur vers la fonction exit. La valeur de cette expression n'est pas récupéré, ce qui revient à faire une instruction vide. Du coup, la fonction exit n'est pas appelée

Discussions similaires

  1. Les meilleurs cours et tutoriels C++
    Par Community Management dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2015, 13h50
  2. Réponses: 6
    Dernier message: 18/06/2012, 09h54
  3. les branchements impossibles
    Par exe2bin dans le forum Général Python
    Réponses: 2
    Dernier message: 28/04/2010, 22h06
  4. Réponses: 3
    Dernier message: 02/10/2008, 21h03
  5. Obligatoire : lisez les règles du forum : MAJ 06/08/2010
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 03/07/2008, 13h46

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