Bonsoir,
est-ce que le résultat que fournit return doit être d'un type bien défini?
est-ce que j'ai le droit de mettre return pour me retourner la valeur d'un type crée à l'avance?
Merci
Bonsoir,
est-ce que le résultat que fournit return doit être d'un type bien défini?
est-ce que j'ai le droit de mettre return pour me retourner la valeur d'un type crée à l'avance?
Merci
soit plus explicite et dis nous ce que tu veux faire.
Qu' est ce que tu entends par type bien defini ? int-real-float-struct-...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 est-ce que le résultat que fournit return doit être d'un type bien défini?
Salut,
Bein oui, tu dois retourner une valeur du type spécifié par la signature de la fonction.
Et quel est le type spécifié par la signature?
C'est toi qui le sait!
Lors de la définition de ta fonction, tu déclares aussi un type pour la valeur de retour.
Si tu as char * fonc(.......) {.....}, ta fonction doit retourner une valeur du type adresse d'un char. Si tu retournes un char, ou un char **, ou autre chose qu'un char *, alors le compilateur râle (et il a raison)
Voici le bout du code
ma fonction est de type pointeur et je veux retourner un pointeur ça colle normalement
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
24
25
26 struct list_event *extraire(struct list_event **p_tete) { struct list_event *event = NULL; /* test la validite du parametre */ if (p_tete != NULL) { struct list_event *p; p = *p_tete; if (p == NULL) { printf("liste vide\n"); } else { *p_tete = p->next; event = p; printf("l'evennement extrait est: "); /* on force l'affichage */ fflush(stdout); } } return *event; }![]()
NON
*event est du type struct list_event alors que la fonction doit retourner struct list_event * (ADRESSE d'un struct list_event)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct list_event *extraire(struct list_event **p_tete) { struct list_event *event = NULL; ... return *event; }
est d'un point de vue du type correct
Code : Sélectionner tout - Visualiser dans une fenêtre à part return event
Je pense que tu confond la déclaration avec le déréférencement du pointeur. Et cela est compréhensible car il utilisent tous les deux le même caractére : *.
Pour illustration :
Signifie : déclaration d'un pointeur vers un entier nommé i:
Code : Sélectionner tout - Visualiser dans une fenêtre à part int * i;
Signifie : Mettre la valeur 2 dans la mémoire pointé par la variable i
Code : Sélectionner tout - Visualiser dans une fenêtre à part *i = 2;
Pour revenir à ton programme :
Ne retourne pas un pointeur mais bien la valeur pointée par la variable event.
Code : Sélectionner tout - Visualiser dans une fenêtre à part return *event;
Ah, ces pointeurs !
Partager