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

Langage C++ Discussion :

question à propos de setjmp/longjmp


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut question à propos de setjmp/longjmp
    Bonjour,

    J'essaye de comprendre les fonctions setjmp/longjmp.
    Il me semble avoir saisi que setjmp permet de sauvegarder
    le context d'exécution au moment de son appel, et que
    longjmp permet de le restaurer c'est a dire que le flux
    d'exécution se retrouve juste apres l'appel a setjmp.

    Mais qu'est ce qui se passe si j'ai place setjmp dans une
    méthode et que j'appelle longjmp à l'extérieur ? Est ce que
    les variables locales à la méthodes sont restaurer ?

    Plus généralement si entre les appels setjmp et longjmp
    j'ai alloué de la mémoire, ouvert un fichier, instantiée une
    classe, est ce que ma classe est bien détruite, ma mémoire
    désallouée, ... ?

    Merci de bien vouloir m'aider à comprendre.

  2. #2
    screetch
    Invité(e)
    Par défaut
    setjmp, longjmp datent du temps du C et etaient utilisés principalement pour les "exceptions" je crois (pas très certain).
    il n'y a aucune garantie: tout ce que tu as fait entre temps n'est pas défait. en C++, avec un peu de bol ca détruit tes variables locales (et appelle donc les destructeurs) mais je n'y crois pas du tout.
    au temps du C ca avait un sens car rien n'est fait automatiquement, tout ce qui est alloué devait être désalloué explicitement, donc le comportement n'était pas changé par longjmp.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Ok, merci !

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    setjmp() et longjmp() n'agissent que sur la pile (et il n'est pas "safe" de faire grand-chose d'autre que retourner dans une des fonctions appelantes avec). En C, c'est assez simple. Mais en C++, selon le compilateur et ses réglages, les destructeurs des variables locales seront peut-être (ou non) appelés...
    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.

  5. #5
    screetch
    Invité(e)
    Par défaut
    peut être de la frame courante, mais pas sur pour la frame de la fonction appelante... ca dépend trop du compilateur. A éviter absolument je cois

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    En effet, autant utiliser les exceptions.
    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.

Discussions similaires

  1. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00
  2. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  3. Petite question à propos du redbook...
    Par Michaël dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 12h54
  4. Petite question à propos d'une requete
    Par ViBy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/09/2004, 12h21
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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