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
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)