Passage d'une fonction sans paramètre en paramètre d'une autre[résolu] - C - Programmation
Marsh Posté le 12-04-2009 à 12:06:23
1- atexit(quit); et non pas atexit(quit());
atexit attend comme paramètre l'adresse d'une fonction de prototype void func(void), comme l'indique son prototype: "int atexit(void (*func)(void));". Cette adresse est donnée directement en passant le nom de la fonction en paramètre (si p est un pointeur de fonction, faire p = func ou p = &func est équivalent en C. ici, p est le paramètre de atexit). Donc atexit(quit); est OK pour le compilateur.
Par contre, le type de retour de l'appel quit() est void et donc pas de type l'adresse d'une fonction de prototype void func(void), ce qui fait raler le compilateur si on fait atexit(quit());
2- SDL_Quit(); et non SDL_Quit;
En C, pour faire comprendre au compilateur qu'on fait un appel de fonction, il faut faire suivre le nom de la fonction par () [avec normalement les valeurs des parametres de la fonction à l'appel entre les ( et ), mais ici il n'y a pas de parametres, donc on se contente de ()].
Note: vous pourriez directement écrire atexit(SDL_Quit); si votre fonction quit est réduite au simple appel de SDL_Quit.
A+,
Marsh Posté le 12-04-2009 à 13:08:29
D'accord, merci !
J'aurai du regarder le profil de atexit !
Marsh Posté le 12-04-2009 à 11:00:20
Bonjour,
Je dispose d'une fonction de profil void quit(void) que j'appelle lors de la fermeture du programme, c'est à dire que je fais atexit(quit).
La fonction quit ne disposant pas de paramètres, je suis tenté d'écrire atexit(quit()) mais le compilateur n'accepte pas. Comment ça se fait ?
Inversement, ma fonction quit contient un appel à SDL_Quit(), or je ne peux pas dans ce cas simplement écrire SDL_Quit, sans les parenthèses. Je préfère écrire avec parenthèse mais c'était juste pour tester et je tombe sur un paradoxe.
Lorsque je tente de faire atexit(quit()) j'obtiens cette erreur:
et lorsque je tente de faire SDL_Quit pour voir si c'est usuel de ne pas mettre de parenthèse s'il n'y a pas d'argument, j'obtiens :
Merci d'avance pour vos explications.
Message édité par atmakefka le 12-04-2009 à 13:09:35