[C] la Question de la Honte !
2 participants
Page 1 sur 1
[C] la Question de la Honte !
Je me pose une question sur les machines à état...
Pour l'instant, pour chaque état de ma machine à état, j'ai 2 fonctions :
* une fonction init qui s'occupe de l'initialisation de l'état (animation, physique), elle ne s'exécute que la première fois
* une fonction update, qui est exécutée à chaque frame, et qui, comme son nom l'indique, met à jour l'état et regarde s'il faut en changer
Typiquement, on a (je retourne à la ligne à chaque frame) :
Sauf que souvent, la fonction init doit appeler la fonction update dans la même frame : j'aimerais avoir :
Mais ça me gêne un peu parce que chaque -> est un appel de fonction, donc écriture de l'adresse de retour dans la pile, et si on imagine que update_B appelle init_C qui appelle update_C , etc., on va se retrouver avec plein d'appels imbriqués, donc de potentiels problèmes de dépassement de pile, des ralentissements, alors que ces retours de fonctions sont inutiles.
Du coup...
J'ose à peine le dire...
Je me demande si ça serait pas un boulot pour l'instruction goto...
Genre :
Suis-je irrémédiablement maudit par les dieux de la programmation structurée ou est-ce que mon raisonnement se tient et je suis dans un des rares cas où le recours à goto est défendable ?
Pour l'instant, pour chaque état de ma machine à état, j'ai 2 fonctions :
* une fonction init qui s'occupe de l'initialisation de l'état (animation, physique), elle ne s'exécute que la première fois
* une fonction update, qui est exécutée à chaque frame, et qui, comme son nom l'indique, met à jour l'état et regarde s'il faut en changer
Typiquement, on a (je retourne à la ligne à chaque frame) :
- Code:
init_A
update_A
update_A -> init_B
update_B
update_B
etc.
Sauf que souvent, la fonction init doit appeler la fonction update dans la même frame : j'aimerais avoir :
- Code:
init_A
update_A
update_A -> init_B -> update_B
update_B
etc.
Mais ça me gêne un peu parce que chaque -> est un appel de fonction, donc écriture de l'adresse de retour dans la pile, et si on imagine que update_B appelle init_C qui appelle update_C , etc., on va se retrouver avec plein d'appels imbriqués, donc de potentiels problèmes de dépassement de pile, des ralentissements, alors que ces retours de fonctions sont inutiles.
Du coup...
J'ose à peine le dire...
Je me demande si ça serait pas un boulot pour l'instruction goto...
Genre :
- Code:
void init_A(Object *self) {
...
goto update_A_body;
}
void update_A(Object *self) {
update_A_body:
...
}
Suis-je irrémédiablement maudit par les dieux de la programmation structurée ou est-ce que mon raisonnement se tient et je suis dans un des rares cas où le recours à goto est défendable ?
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: [C] la Question de la Honte !
Si c'est ce que tu cherches, je pense qu'un GOTO pourrait être vu comme une jump table, par contre pour faire ça en C .Je me demande si ça serait pas un boulot pour l'instruction goto...
Mais si j'ai bien compris y'a des fonctions ré-entrantes dans ton code ??
Invité- Invité
Re: [C] la Question de la Honte !
Non, c'est pas vraiment une jump table. Ce serait plutôt une fonction à double point d'entrée. Je sais que certains compilos sont capables d'optimiser et de changer un jsr suivi d'un rts par un bra, mais pas tous.
Goto existe en C. Il y a un complot international qui empêche tout tuto d'en parler, mais il est dans le standard
Goto existe en C. Il y a un complot international qui empêche tout tuto d'en parler, mais il est dans le standard
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: [C] la Question de la Honte !
Il accepte les goto cross fonction le C? c'est un deglingo
Si t'as vraiment peur pour la pile (faut quand même y aller) , mets un flag pour savoir si il faut encore update l'objet, puis colle un while.
Si t'as vraiment peur pour la pile (faut quand même y aller) , mets un flag pour savoir si il faut encore update l'objet, puis colle un while.
- Code:
update();
while(obj.busy)
update();
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Re: [C] la Question de la Honte !
un GOTO variable en asm c'est un jmp ou un jsr dans un pointeur "de fonction", tu changes l'adresse du pointeur pour sauter vers ton entrée .
EDIT: sinon un flag comme dit hpman.
EDIT: sinon un flag comme dit hpman.
Invité- Invité
Re: [C] la Question de la Honte !
Ou alors si tu veux avoir la classe:
Et tu renvoies true/false en fonction
- Code:
while(update());
Et tu renvoies true/false en fonction
Dernière édition par Hpman le Lun 10 Sep 2018 - 19:37, édité 1 fois
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Re: [C] la Question de la Honte !
Ouaille. Mais ça introduit un mécanisme assez lourd pour finalement un truc qui a peu de chance de se produire...
Mais t'as raison, y'a peu de chances que tu puisses faire un goto entre fonctions.
Mais je suis sûr d'avoir vu un jmp entre 2 fonctions dans du code compilé, donc le compilateur doit savoir gérer ce genre d'optimisation.
Mais c'était sur PS2...
Mais t'as raison, y'a peu de chances que tu puisses faire un goto entre fonctions.
Mais je suis sûr d'avoir vu un jmp entre 2 fonctions dans du code compilé, donc le compilateur doit savoir gérer ce genre d'optimisation.
Mais c'était sur PS2...
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: [C] la Question de la Honte !
en asm un goto entre 2 fonctions est faisable,en C j'en doute .
Invité- Invité
Re: [C] la Question de la Honte !
Je sais. Mais en C, pour des histoires de signature, ça m'étonnerait...
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: [C] la Question de la Honte !
Encore plus fort, en asm on peut goto dans du data
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Sujets similaires
» LE TOP 95 DE LA HONTE
» Les jeux de la honte
» pes6 360 : une honte
» La grosse honte
» La France 4e, la honte absolue.
» Les jeux de la honte
» pes6 360 : une honte
» La grosse honte
» La France 4e, la honte absolue.
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum