50Fermer52
GodzilLe 13/11/2009 à 17:03
Mais pour ton cas particulier, tu peux juste faire un

	if(CharY < 30) 
	{ 
		offset = 30 - CharY; 
		CharY = 30; 
		PlanePtr->ys -= offset; 
		if((signed) PlanePtr->ys < 0) 
		{ 
			CharY -= PlanePtr->ys; 
			PlanePtr->ys = 0; 
		} 
	} 
        else
        {
        	limit = LCD_HEIGHT - 30; 
        	if((unsigned) CharY > limit) 
        	{ 
        		offset = CharY - limit; 
        		CharY = limit; 
                		PlanePtr->ys += offset; 
	        	if(PlanePtr->ys > ScrollMaxY) 
        		{ 
        			CharY -= PlanePtr->ys; 
        			PlanePtr->ys = ScrollMaxY; 
        		} 
                }
	} 

Comme le dit bob, j'avais un apriori sur les gotos a l'origine, apriori véhiculé par des idiots du C, c'est vrai, et en fait j'ai découvert la puissance du goto, et j'en abuse now wink

int bla()
{
 int ret = 0;
 int blabla;

 printf(">>%s()", __func__);

 blabla = do_that();

 if (blabla == fail)
 {
   ret = -1;
   goto exit:
 }
  do_these();

exit:
 printf("<<%s() = %d", __func__, ret);
 return ret;
}


La ça peut paraitre ridicule, mais le code est beaucoup plus lisible, il n'est pas bloaté par des printf a chaque return etc...

Autre cas on c'est utile (tres utilisé dans linux par exemple)

int func()
{
 int ret = 0;
 FILE *fp;
 char *toto;
 toto = (char*)malloc(128);
 if (!toto)
   goto bad_exit;
 if (!(fp = fopen("thefile.txt", "rt")))
   goto free_toto:
 
 do_whatever_we_want();
 fclose(fp);
 goto exit;

free_toto:
  free(toto);
bad_exit:
  ret = -1;
exit:
  return ret;
}


(par exemple)