#include #include #define A 11 #define B 4 int f1(int x,int y) {return x+y-1;} int f2(int x,int y) {return x-y++;} int f3(int x,int y) {return ++x-y;} int f4(int x,int y) {x+=y; x+=y; y+=x; return x+y;} void p1(int *xx,int y) {*xx+= y+=*xx;} void p2(int *xx,int *yy) {*xx+=*yy+=*xx;} int f5(int x, int *yy) {while(x>=0) x+=f5(*yy-=2,&x); return x;} int ni=0; int f6(int x, int *yy) // f5 en plus bavard { int dx; ni++; printf("%*d début : on crée x%d=%d et yy%d=&x%d\n",ni+2,ni,ni,x,ni,ni-1); while(x>=0) printf("%*d on évalue f5(*yy%d-=2,&x%d)=f5(x%d-=2,&x%d)=f5(%d,&x%d) car x%d passe de %d à %d\n", ni+2,ni, ni,ni, ni-1,ni, *yy-2,ni, ni-1,*yy,*yy-2), x+=dx=f6(*yy-=2,&x), printf("%*d x%d+=%d %d-->%d\n",ni+2,ni,ni,dx,x-dx,x); printf("%*d fin : on détruit x%d et yy%d on rend %d\n",ni+2,ni,ni,ni,x); ni--; return x; } typedef struct maillon maillon, *liste; struct maillon{int val; liste suiv;}; liste nouv(int val,liste suiv) {liste a=malloc(sizeof(*a)); *a=(maillon){val,suiv}; return a;} void aff(liste a) {for(;a;a=a->suiv) printf(" %d",a->val); printf("\n");} #define ijk printf("%2d i=%d j=%d k=%d\n",++nl,i,j,k) #define abc printf("%2d *a=%d *b=%d *c=%d\n",++nl,*a,*b,*c) #define affl(l) printf(#l"="), aff(l) #define l1l2l3 affl(l1),affl(l2),affl(l3) int main() { int i,j,k,nl=0,*a,*b,*c; liste l1=0,l2=0,l3=0,l4; i=A; j=B; k=i+j; ijk; ijk; k=i+j++; ijk; k=i+j++; ijk; k=++i+j; ijk; k=++i+j; ijk; i=A; j=B; k=i+j; ijk; ijk; k=f1(i,j); ijk; k=f2(i,j); ijk; k=f3(i,j); ijk; k=f4(i,j); ijk; i+=f1(i,i); ijk; i+=f1(i,i); ijk; j+=f1(j,i); ijk; j+=f1(j,i); ijk; i=A; j=B; k=i+j; ijk; ijk; p1(&i, j); ijk; p1(&j, i); ijk; p1(&i, i); ijk; i=A; j=B; k=i+j; ijk; ijk; p2(&i,&j); ijk; p2(&j,&i); ijk; p2(&i,&i); ijk; i=A; j=B; k=i+j; ijk; ijk; a=&i; b=&j; c=&k; for(i=3;i<20;i++) ++*c, ++*b, ++*a, ijk, abc, c=b, b=a, abc; i=A-B-3, printf("%d\n",f5(i,&i)); i=A-B-3, printf("%d\n",f6(i,&i)); for(i=0;i<4;i++) l1=nouv(i+A,l1), l2=nouv(i+B,l2); l1l2l3; for(l3=l1,l4=l2;l3 && l4;l3=l3->suiv,l4=l4->suiv) l3->val+=l4->val; l1l2l3; for(l3=l1;l3;l3=l3->suiv->suiv) l3->suiv=nouv(l3->val+10,l3->suiv); l1l2l3; l1->suiv=nouv(A+B,l1->suiv); while(l1) l4=l1, l1=l2, l2=l4->suiv, l4->suiv=l3, l3=l4; l1l2l3; printf("\f"); return 0; }