(cross, réponse à martial)
non. ça va s'appeler récursivement et remplir la pile.
ce que tu veux faire ça s'appelle des threads/couroutines/tâches, faut deux piles différentes et utiliser un truc de taskswitch préemptif style je-sais-plus-le-nm-du-truc-de-ximoon
alternativement ça peut se faire assez simplement (sisi

) avec setjmp
https://www.unsads.com/scm/svn/squalyl/asi/systeme/P3S/test/switcher-ti68k/
user guest
pass guest
(je sais plus si c'est complet, je sais plus si ça marche, mais le principe y est. Dommage j'avais un truc encore plus simple que ça, je le retrouve plus

)
edit: ah le voila
#include <stdio.h>
#include <setjmp.h>
/*
| context switch presque portable avec setjmp, longjmp
| pour comprendre setjmp et longjmp voir la doc :
| http://www-ensimag.imag.fr/cours/Systeme/setjmp.longjmp
|
*/
#define K 1024
#define TAILLE_PILE 4*K
int mem [TAILLE_PILE]; /* memoire pour la pile du processus 1 */
int * deb_mem;
int proc_actif = 0;
jmp_buf buf_processus[2];
/*----------------------------------------------------------------------------*/
void ctxsw(actif, elu) {
if (setjmp(buf_processus[actif]) == 0) {
proc_actif = elu;
longjmp(buf_processus[elu], 1);
}
}
/*----------------------------------------------------------------------------*/
int choix_elu() {
if (proc_actif == 0) return 1; else return 0;
}
/*----------------------------------------------------------------------------*/
void resched() {
int proc_elu;
proc_elu = choix_elu();
ctxsw(proc_actif, proc_elu);
}
/*----------------------------------------------------------------------------*/
/*
| code execute par les 2 processus
|
*/
void code_processus(char * mess) {
int i;
while(1) {
printf ("%s", mess);
resched(); /* changement de processus */
}
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
int main() {
deb_mem = mem; /* on pourrait faire un malloc a la place */
/*
| ici c'est le processus 0 qui s'exécute avec la pile allouée au lancement du programme C
*/
if (setjmp(buf_processus[1]) == 0) {
#ifdef LINUX
/*
| Initialisation de la pile pour le processus 1 (petit bricolage specifique pour linux/i386)
*/
buf_processus[1][0].__jmpbuf[JB_SP] = deb_mem + TAILLE_PILE;
#else
#ifdef SOLARIS
/*
| Initialisation de la pile pour le processus 1
| (petit bricolage specifique pour Solaris/Sparc)
*/
buf_processus[1][1] = (int) deb_mem + TAILLE_PILE - 16;
#else
#error "use -DLINUX or -DSOLARIS"
#endif
#endif
printf ("Je suis le processus 0 et je pars dans la boucle\n");
code_processus("je pense\n");
} else {
printf ("Je suis le processus 1 et je pars dans la boucle\n");
code_processus(" donc tu es\n");
}
}