Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1768 connectés 

  FORUM HardWare.fr
  Programmation
  C

  goto

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

goto

n°1341472
mbarekh
Posté le 07-04-2006 à 14:30:56  profilanswer
 

Bonjour,
y a t il une possibilité en C de demander à un programme d'aller à une ligne donné du code aprés une certaine instruction?
C'est à dire, quelque chose comme:
 
if (a==b)
 goto (ligne13 du code)

mood
Publicité
Posté le 07-04-2006 à 14:30:56  profilanswer
 

n°1341476
Trap D
Posté le 07-04-2006 à 14:36:47  profilanswer
 

mbarekh a écrit :

Bonjour,
y a t il une possibilité en C de demander à un programme d'aller à une ligne donné du code aprés une certaine instruction?
C'est à dire, quelque chose comme:
 
if (a==b)
 goto (ligne13 du code)

Oui mais c'est fortement déconseillé, exemple tiré de MSDN (au mieux de leur forme  :pt1cable: )

Code :
  1. void main()
  2. {
  3.     int i, j;
  4.     for ( i = 0; i < 10; i++ )
  5.     {
  6.         printf( "Outer loop executing. i = %d\n", i );
  7.         for ( j = 0; j < 3; j++ )
  8.         {
  9.             printf( " Inner loop executing. j = %d\n", j );
  10.             if ( i == 5 )
  11.                 goto stop;
  12.         }
  13.     }
  14.     /* This message does not print: */
  15.     printf( "Loop exited. i = %d\n", i );
  16.     stop: printf( "Jumped to stop. i = %d\n", i );
  17. }


Message édité par Trap D le 07-04-2006 à 14:37:34
n°1341480
_darkalt3_
Proctopathe
Posté le 07-04-2006 à 14:40:55  profilanswer
 

+1  [:_darkalt3_]
 
Je ne vois meme pas dans quel cas on peut en avoir besoin et ne pas pouvoir s'en passer.
 
Edit: j'oublie qu'on est vendredi

Message cité 2 fois
Message édité par _darkalt3_ le 07-04-2006 à 14:41:33
n°1341484
Elmoricq
Modérateur
Posté le 07-04-2006 à 14:41:50  profilanswer
 

Le goto, en C, ne s'utilise que dans des cas très spécifiques.
En dehors de ces cas plutôt rares, cette instruction est déconseillée.
 

_darkalt3_ a écrit :

+1  [:_darkalt3_]
 
Je ne vois meme pas dans quel cas on peut en avoir besoin et ne pas pouvoir s'en passer.


 
Il n'arrive jamais qu'on ne puisse pas du tout se passer de goto.
Néanmoins, il y a des cas particuliers pour lesquels l'utilisation de cette instruction simplifie grandement les choses, et dans ce cas on aurait tort de ne pas l'utiliser.
 
'fin bon, je n'ai personnellement jamais eu besoin de l'utiliser, j'ai juste vu un cas ou deux où c'était effectivement justifié.

Message cité 1 fois
Message édité par Elmoricq le 07-04-2006 à 14:43:25
n°1341489
mbarekh
Posté le 07-04-2006 à 14:47:27  profilanswer
 

je l'ai essayé, ça n' a pas marché et quand j'ai mis ce que j'ai ajouté en commentaire et compilé j'ai eu le message d'erreur suivant:
 
ld: 0711-750 SEVERE ERROR: The file system is full.
ld: 0711-994 Error occurred while writing to the temporary output file: ./b.YFbd7a
make: *** [tst] Error 1

n°1341491
Elmoricq
Modérateur
Posté le 07-04-2006 à 14:50:30  profilanswer
 

Relis le message d'erreur.

n°1341495
mbarekh
Posté le 07-04-2006 à 14:55:03  profilanswer
 

Ca voudrait dire que la memoire est pleine? Si c'est vrai c'est le goto qui a causé ça?  
pour le moment le probl_ème est résolu après plusieurs make, mais je ne comprends pas ce qui s'est passé

n°1341498
_darkalt3_
Proctopathe
Posté le 07-04-2006 à 14:57:55  profilanswer
 

Elmoricq a écrit :

'fin bon, je n'ai personnellement jamais eu besoin de l'utiliser


 
Voilà :D

n°1341509
mbarekh
Posté le 07-04-2006 à 15:08:54  profilanswer
 

quelqu'un a une idée de ce que voudrait dire ce message d'erreur?
 
ld: 0711-750 SEVERE ERROR: The file system is full.  
ld: 0711-994 Error occurred while writing to the temporary output file: ./b.YFbd7a  
make: *** [tst] Error 1  

n°1341512
_darkalt3_
Proctopathe
Posté le 07-04-2006 à 15:13:53  profilanswer
 

mmmh le filesystem n'en peut plus et le temp est plein ?

mood
Publicité
Posté le 07-04-2006 à 15:13:53  profilanswer
 

n°1341516
mbarekh
Posté le 07-04-2006 à 15:19:02  profilanswer
 

et comment on peut régler ça?

n°1341517
skelter
Posté le 07-04-2006 à 15:19:23  profilanswer
 

_darkalt3_ a écrit :

+1  [:_darkalt3_]
 
Je ne vois meme pas dans quel cas on peut en avoir besoin et ne pas pouvoir s'en passer.
 
Edit: j'oublie qu'on est vendredi


 
ca peux servir, comme le C n'offre pas de support pour une gestion d'erreur par exception
on aimerait bien pouvoir extraire d'un algorithme d'une complexite autre qu'un "hello
world" le code de gestion des erreurs lui meme tres complexe
 

Code :
  1. int toto()
  2. {
  3.     int * n1, * n2, *n3;
  4.    
  5.     n1 = malloc(...);
  6.     if( ! n1 )
  7.     {
  8.         return ...;
  9.     }
  10.    
  11.     ...
  12.    
  13.     n2 = malloc(f(n1));
  14.     if( ! n2 )
  15.     {
  16.         free(n1);
  17.         return ...;
  18.     }
  19.    
  20.     ...
  21.    
  22.     n3 = malloc(f(n2));
  23.     if( ! n3 )
  24.     {
  25.         free(n1);
  26.         free(n2)
  27.         return ...;
  28.     }
  29.    
  30.     /* et encore, ca reste tres simple */
  31.     ...
  32.    
  33.     free(n1);
  34.     free(n2);
  35.     free(n3);
  36.     return 0;
  37. }


 
la version avec goto et gestion d'erreur reportée géographiquement dans le code

Code :
  1. int toto()
  2. {
  3.     int * n1 = NULL, * n2 = NULL, *n3 = NULL;
  4.     int error = 0;
  5.    
  6.     n1 = malloc(...);
  7.     if( ! n1 )
  8.     {
  9.         error = ...;
  10.         goto end_pt;
  11.     }
  12.    
  13.     ...
  14.    
  15.     n2 = malloc(f(n1));
  16.     if( ! n2 )
  17.     {
  18.         error = ...;
  19.         goto end_pt;
  20.     }
  21.    
  22.     ...
  23.    
  24.     n3 = malloc(f(n2));
  25.     if( ! n3 )
  26.     {
  27.         error = ...;
  28.         goto end_pt;
  29.     }
  30.    
  31. end_pt:
  32.     free(n1);
  33.     free(n2);
  34.     free(n3);   
  35.     return error;
  36. }


 
une autre solution c'est d'en avoir rien à foutre des fuites et autres ressources non finalisée, comme beaucoup de programmeurs

Message cité 1 fois
Message édité par skelter le 07-04-2006 à 15:35:42
n°1341521
olivthill
Posté le 07-04-2006 à 15:22:46  profilanswer
 

Le file system n'est pas la mémoire mais le disque.
Dans file system, il y a file qui veut dire fichier.

n°1341525
Elmoricq
Modérateur
Posté le 07-04-2006 à 15:26:24  profilanswer
 

mbarekh a écrit :

Ca voudrait dire que la memoire est pleine?


 
Tu n'as plus d'espace sur ton disque, make ne parvient pas à créer ton fichier.
 

skelter a écrit :

Code :
  1. end_pt:
  2.     if( n1 )
  3.         free(n1);
  4.     if( n2 )
  5.         free(n2);
  6.     if( n3 )
  7.         free(n3);   
  8.     return error;
  9. }




 
<pinaillage>free(NULL) étant défini par la norme, les "if" sont inutiles.</pinaillage> ;)

n°1341529
_darkalt3_
Proctopathe
Posté le 07-04-2006 à 15:28:24  profilanswer
 

oui, mais ...
 

Code :
  1. void toto()
  2. {
  3. int *n1, *n2, *n3;
  4. n1 = (int *) malloc(...);
  5. if (n1)
  6. {
  7.  n2 = (int*) malloc(...);
  8.  if (n2)
  9.  {
  10.   n3 = (int*) malloc(...);
  11.   if (n3)
  12.   {
  13.    traitements(n1,n2,n3);
  14.    free(n3);
  15.   }
  16.   free(n2);
  17.  }
  18.  free(n1);
  19. }
  20. }


 
 
mais je pinaille, merci pour ton exemple.


Message édité par _darkalt3_ le 07-04-2006 à 15:30:30
n°1341539
skelter
Posté le 07-04-2006 à 15:33:58  profilanswer
 

Elmoricq a écrit :

Tu n'as plus d'espace sur ton disque, make ne parvient pas à créer ton fichier.
 
 
 
<pinaillage>free(NULL) étant défini par la norme, les "if" sont inutiles.</pinaillage> ;)


 
en effet, merci :)

n°1341610
black_lord
Truth speaks from peacefulness
Posté le 07-04-2006 à 16:27:46  profilanswer
 

http://forum.hardware.fr/hardwaref [...] 6883-1.htm
 
[:pingouino]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1341619
mbarekh
Posté le 07-04-2006 à 16:32:10  profilanswer
 

oui c'est le début et la suite de mes problèmes. mais tu pense qu'il y a une solution?

n°1342100
Sve@r
Posté le 08-04-2006 à 15:36:13  profilanswer
 

mbarekh a écrit :

oui c'est le début et la suite de mes problèmes. mais tu pense qu'il y a une solution?


 
Tu te places à la racine de ton système de fichiers (filesystem) et tu tapes la commande
du -sk * |sort -n
 
Tu obtiendras la liste des répertoires triés par taille (le plus gros en premier). Tu descends dans le plus gros et tu retapes la même commande, etc etc jusqu'à ce que tu aies identifié le fichier (ou répertoire) inutile qui te bouffe tout ton espace disque. Là, tu l'effaces
 
Bien entendu cette manip part de l'hypothèse que tu as un gros fichier (ou répertoire) inutile dans ton filesystem...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  goto

 

Sujets relatifs
On error goto, toujours executéSyntaxe du GOTO en Ada
Probleme de _root ou goto je sais pas trop :(Probleme On error goto
Aide svp => on error goto ...VBS :: goto ?
Gototest if et goto
Equivalent GOTO[VBA] (ACCESS) "erreur de compilation - attendu Then ou goto " ...
Plus de sujets relatifs à : goto


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR