Je suis Tring pour définir jmp_buf comme pointeur et l'utiliser dans longjmp imbriquée (s) .Comme suivre:indiquant jmp_buf comme pointeur
...
jmp_buf *bfj;
...
puis écrit si d'autre:
if(setjmp(*bfj) == 0){
DS[SP-2].int_val=(int)bfj;;
//to store the bfj
}else {}
et un autre endroit en utilisant le BFJ stocké à longjmp
bfj = (jmp_buf *)DS[TOP].int_val;
longjmp(*bfj,1);
où DS [TOP] .int_val est où je stockées. comme cela peut sembler clair, je veux faire gotos imbriqués et retourne en utilisant bfj stocké. mais bien quand j'essaie de déboguer je reçois "exception non distribuée". J'obtiens ceci au point de départ:
if(setjmp(*bfj) == 0)
Je serais heureux si quelqu'un dirait la solution.
On vous l'a dit (http://stackoverflow.com/questions/3087268/question-with-longjmp) que ce que vous essayez de faire n'est pas une bonne idée. Si vous ne tenez pas compte des conseils, que demandez-vous? – sbi
Je sais que ce n'est pas une bonne idée d'utiliser longjmps mais quand vous essayez d'écrire un code proche du langage assembleur pour la sortie de la phase sémantique d'un compilateur, c'est la seule solution qui me vient à l'esprit. que j'écris, c'est le chemin et oui ce n'est pas le bon moyen. Je dois produire du code qui soit proche de l'assemblage, (code trois adresses). Je n'utilise jamais goto ou longjmp pour les programmes standards mais dans ce cas, je dois produire un tel code. c'est le naturel des compilateurs. – angela
Non, ce n'est pas le "naturel des compilateurs". Un compilateur n'est pas différent de tout autre programme: tout ce qu'il fait est de traduire une sorte d'entrée à un type de sortie. Le fait que vous pensez que vous devez utiliser 'longjmp' (et que vous ne comprenez pas clairement ce que ça fait ou comment cela fonctionne) suggère que vous faites quelque chose de très mal. – greyfade