/*************************************************************************************************************************************/
/* */
/* S I M U L A T I O N D ' U N ' goto ' R E L A N C A N T L E ' main() ' : */
/* */
/* */
/* Test : */
/* */
/* Le test se fera, par exemple, a */
/* l'aide de : */
/* */
/* $aPout $formatI */
/* */
/* */
/* Author of '$xtc/goto.01$c' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */
/* */
/*************************************************************************************************************************************/
int compteur=0;
void fonction(variable,nombre,arguments)
int variable;
int nombre;
char *(arguments[]);
{
compteur++;
if (compteur <= 1)
{
printf("\n relance du main (compteur=%d,variable=%d)",compteur,variable);
if (nombre >= 2)
{
arguments[2]="bonjour";
/* Modification de l'argument numero 2... */
}
else
{
}
main(nombre,arguments);
/* Relance du 'main(...)'. */
printf("\n fin\n");
exit();
/* Et on est contraint de faire un 'exit()' au retour du 'main(...)' car, sinon, la */
/* fonction 'fonction(...)' rendrait alors le controle a l'appelant qui est 'main(...)', */
/* et qui serait donc reexecute une deuxieme fois... */
}
else
{
printf("\n compteur=%d variable=%d",compteur,variable);
}
}
main(nombre,arguments)
int nombre;
char *(arguments[]);
{
int n;
printf("\n");
for (n=0 ; n<nombre ; n++)
{
printf(" argument(%d)=\"%s\"",n,arguments[n]);
}
fonction(1,nombre,arguments);
fonction(2,nombre,arguments);
fonction(3,nombre,arguments);
fonction(4,nombre,arguments);
fonction(5,nombre,arguments);
fonction(6,nombre,arguments);
fonction(7,nombre,arguments);
fonction(8,nombre,arguments);
}