Sauter une ligne spécifique dans le code à l'aide de C
Désolé si cette question est stupide, mais je n'arrive pas à trouver la réponse sur Google. Je n'ai pas fait de C programmation en temps et pour la vie de me rappeler comment, en C ou en C++, pour revenir en arrière (ou en avant) sur une ligne spécifique dans le code. Si je me souviens bien, il y avait un moyen de le faire.
Merci pour l'aide!
Cheers!
- Attention.
- Il suffit de prendre un spécial note que juste au sujet de chaque personne ici qui offre une solution consiste à donner des conseils à son encontre.
goto
vont travailler dans votre exemple, mais il serait probablement préférable de restructurer votre code du programme.
Vous devez vous connecter pour publier un commentaire.
L'infâme goto, dans conjuntion avec des étiquettes.
Avant de l'utiliser, de la recherche pour "goto considéré comme nocif".
goto
, ce qui n'est pas présente dans Java, et a besoin d'elle maintenant. Je doute qu'il essayait d'imiterwhile
boucles avecgoto
.type *x = malloc(sizeof *x); if(!x) goto ERR1; x->member = malloc(sizeof *x->member); if(!x->member) goto ERR2; /* initialize x and x->member */; return x; ERR2: free(x); ERR1: return NULL;
idéalement poignées de libérer un ou plusieurs membres imbriqués dans le cas où l'une des allocations échoue sans se retrouver avec des millions de niveaux d'indentation.goto
, je suis d'accord. La question est un peu difficile à laquelle on l'OP est en fait l'utilisation.Le C et le C++ n'ont pas de concept de "lines", après l'étape de prétraitement. En tant que tel, vous ne peut pas "sauter" une ligne de code.
Si vous voulez sauter une ligne de code dans votre éditeur, cela dépend de ce que l'éditeur que vous utilisez. Si vous voulez aller à une déclaration (pas ligne) à runtime, vous pouvez utiliser
goto
, mais ceci devrait être évité dans la plupart des circonstances, qu'elle conduit difficile de comprendre le code, et d'autres flux de contrôle les structures sont plus appropriées dans la plupart des cas.Si vous voulez le méchant et facile solution:
goto
, puis d'une étiquette qui indique la ligne de code que vous voulez aller.Normalement, vous auriez une fonction avec la fonction spécifique que vous souhaitez appeler et appeler cette fonction.
Je ne crois également que l'instruction goto ne doit pas être utilisé lorsque vous pouvez l'aider.
Cependant, contrairement à beaucoup d'autres langues, il n'y a pas un moyen sympa de sortie de multi-couches de si() bloque et le plus simple est d'aller dans ce cas.
Ce que je suggère, c'est que vous ajoutez des commentaires et à utiliser judicieusement nommé étiquettes (l1: ... goto l1; suce.)
Remarque que les gens vont vous dire que le goto est mauvais, et utiliser le break " et " continue en boucle comme un fou. Ils ont exactement le même côté effet que l'instruction goto et pourrait être considérée comme de la mauvaise (mais ne le sont pas).
Utiliser un
goto
déclaration, comme ceci:Noter que ceci est considéré comme une très mauvaise pratique. Les Chances sont, il ya une meilleure façon d'organiser votre code pour éviter tout à fait.
Il y a quelques options pour le faire: 'goto' instruction, setjmp/longjmp fonctions. Vous pouvez aussi l'utiliser en c++ SEH (à l'exception de la propagation et de manutention), mais il n'est pas simple. Et si vous avez vraiment nead une telle chose comme le saut de ligne de code, je vous recommande de reprendre ton code à l'aide de boucles et instructions conditionnelles avec d'autres variables d'état. Parce que vous avez de sérieux problème avec la structure ou la conception de votre code. Il peut sembler laid, mais il est plus sûr que d'utiliser goto et d'autres de la "magie noire"
throw
etcatch
sont moins simples quesetjmp
/longjmp
? Ce sont des nouvelles pour moi, mais je soupçonne qu'ils sont plutôt vieux. Aussi, les variables de condition sont plus complexes que d'goto
quand elles ne font qu'augmenter le nombre de membres du programme peuvent être sur n'importe quelle ligne de code. Si l'état d'unif
bloc correspond exactement à celui qui est exigé par à un certain point dans leelse
bloc, il peut être préférable degoto
où vous devez être, que d'introduire une boucle qui est censé s'exécuter au plus une fois.