Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3174 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Passage d'une fonction sans paramètre en paramètre d'une autre[résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passage d'une fonction sans paramètre en paramètre d'une autre[résolu]

n°1872325
atmakefka
Posté le 12-04-2009 à 11:00:20  profilanswer
 

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.
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.   (...)
  4.   atexit(quit); /*impossible de faire atexit(quit())
  5.    
  6.   (...)
  7.   return EXIT_SUCCESS;
  8. }


 

Code :
  1. void quit(void)
  2. {
  3.   SDL_Quit();   /*impossible de faire SDL_Quit */
  4. }


 
Lorsque je tente de faire atexit(quit()) j'obtiens cette erreur:
 

Code :
  1. make
  2. gcc -g -Wno-unused-parameter -Wall -ansi -pedantic `sdl-config --cflags --libs` -c src/init.c
  3. gcc -g -Wno-unused-parameter -Wall -ansi -pedantic `sdl-config --cflags --libs` -c src/input.c
  4. gcc -g -Wno-unused-parameter -Wall -ansi -pedantic `sdl-config --cflags --libs` -c src/main.c
  5. src/main.c: In function ‘main’:
  6. src/main.c:11: erreur: utilisation invalide d'expression void
  7. make: *** [main.o] Erreur 1


 
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 :

Code :
  1. make
  2. gcc -g -Wno-unused-parameter -Wall -ansi -pedantic `sdl-config --cflags --libs` -c src/init.c
  3. src/init.c: In function ‘quit’:
  4. src/init.c:27: attention : déclaration sasn effet


 
 
Merci d'avance pour vos explications.


Message édité par atmakefka le 12-04-2009 à 13:09:35
mood
Publicité
Posté le 12-04-2009 à 11:00:20  profilanswer
 

n°1872330
gilou
Modérateur
Modzilla
Posté le 12-04-2009 à 12:06:23  profilanswer
 

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+,


Message édité par gilou le 12-04-2009 à 12:09:02

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1872337
atmakefka
Posté le 12-04-2009 à 13:08:29  profilanswer
 

D'accord, merci !
J'aurai du regarder le profil de atexit !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Passage d'une fonction sans paramètre en paramètre d'une autre[résolu]

 

Sujets relatifs
Fonction pour lister BDD mysqlFonction qui renvoie automatiquement à une page
pointeur et fonction langage C[résolu] Ptit souci avec un SELECT
exercice pointeur et fonction langage Cexercice pointeur et fonction langage C
Probleme de syntaxe pour envoyer une chaine vers une fonction javascri[Resolu]Firefox Fonction Javascript replace fonctionne pas
[RESOLU] tab multidimensionel en paramètre d'une fonction[Résolu] Passage d'une fonction en paramètre ?!?
Plus de sujets relatifs à : Passage d'une fonction sans paramètre en paramètre d'une autre[résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR