Je dois écrire une fonction de somme normale et une fonction réentrante en C. Je dois passer un int et il doit être ajouté à un INIT_VALUE. Dans la fonction réentrante, le principal passe un int * pour conserver l'état. Comment puis-je initialiser ce pointeur sur le premier appel? Je dois l'initialiser dans le plaisir, pas dans le principal. MerciIndice écrire une fonction de somme réentrante
#include <stdio.h>
#ifndef INIT_VALUE
#define INIT_VALUE 0
#endif
int somma(int x){
static int val = INIT_VALUE;
val += x;
return val;
}
int somma_r(int x, int* saveptr){
// pointer initialize and sum
// return old_value ;
}
int main(){
int x;
int s;
int s_r;
int *stato;
fscanf(stdin,"%d",&x);
while(x>=0){
s = somma(x);
s_r = somma_r(x,stato);
fscanf(stdin,"%d",&x);
}
printf("%d\n",s);
printf("%d\n",s_r);
return 0;
}
Je dois l'initialiser dans le plaisir, pas dans le main_. Non pourquoi? –
Utilisez un pointeur vers un pointeur et utilisez [malloc] (http://www.tutorialspoint.com/c_standard_library/c_function_malloc.htm) dans votre func. Par exemple. 'int somma_r (int x, int ** saveptr) {* saveptr = malloc (sizeof (int);}' – LPs