Bonjour,
Lors de la réalisation d'un exercice, je suis tombé sur une erreur que je ne comprend pas.
J'ai trouvé la solution, mais je n'en comprend pas la raison.
J'ai donc une fonction de type int depuis laquelle je retourne une valeur:
Le prototype de ma fonction
L'appel depuis le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part int init_stGestMsg(int *pRC);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (init_stGestMsg(&pRC) == GM_ERROR) { puts(GM_INIT_ERROR); } else { puts(GM_INIT_OK); }
et la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 int init_stGestMsg(int *pRC) { // ------------------------------------------------------------------------------------------------------- // Initialisation des variables etGestMsg stGestMsg = {NULL, 0, 5}; stGestMsg.dTailleBlocMax = stGestMsg.dTailleBloc; // ------------------------------------------------------------------------------------------------------- // Création du tableau de messages TabMsg if ((stGestMsg.tTabMsg = malloc(stGestMsg.dTailleBloc * sizeof(char*))) == NULL) { return GM_ERROR; } else { return GM_OK; } }
jusque la tout va bien..
Mais en relisant l'exercice demandé par le prof, je m’aperçois qu'il demande à ce que la fonction soit de type void.
du coup j’édite le type de la fonction avec un void et je fais les modif dans la fonction comme ceci
et j'ai l'erreur dans le main dont je parlais et que je ne comprend pas ou il souligne ma fonction en rouge et me dit que "l'expression doit avoir un type arithmétique ou pointeur"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 void init_stGestMsg(int *pRC) { // ------------------------------------------------------------------------------------------------------- // Initialisation des variables etGestMsg stGestMsg = {NULL, 0, 5}; stGestMsg.dTailleBlocMax = stGestMsg.dTailleBloc; // ------------------------------------------------------------------------------------------------------- // Création du tableau de messages TabMsg if ((stGestMsg.tTabMsg = malloc(stGestMsg.dTailleBloc * sizeof(char*))) == NULL) { *pRC = GM_ERROR; } else { *pRC = GM_OK; } }
La solution que j'ai trouvé est d'ajouter une * apres le void dans le prototype
et de faire de même dans le fichier de la fonction évidemment..
Code : Sélectionner tout - Visualiser dans une fenêtre à part void * init_stGestMsg(int *pRC);
En chipotant, je me rend compte que c'est a cause de l'inclusion de l'appel de fonction dans mon Ifque cela pose problème, et que si j'appelle la fonction en dehors du If, je n'ai pas besoin de rajouter l'* après le void..
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (init_stGestMsg(&pRC) == GM_ERROR)
Et c'est la qu'est ma question.. Pourquoi???
Partager