OVH Cloud OVH Cloud

Definition de fonction et typedef

22 réponses
Avatar
Bertrand Mollinier Toublet
Salut,

en me torturant les meninges sur un automates d'etats, il m'est venu
l'idee tordue suivante: definissant un contexte pour mon automate

struct ibsm_context;

et considerant mes etats comme des fonctions retournant le numero de
l'etat suivant, je definis le type:

typedef int (*state)(struct ibsm_context *);

Ainsi, ayant un tableau associant un etat avec un context:

enum
{
START = 0,
DO_STUFF,
END,
STATE_COUNT
};

state states[] =
{
start,
do_stuff,
end
};

Et ma boucle principale ressemble a ca:

void run_automate(void)
{
struct ibsm_context *context = create_context();
int current_state = START;

while (END != (current_state = states[current_state](context)))
/* RIEN ICI */ ;

/* tadam, mon automate a tourne comme il faut... */
}

Maintenant, l'idee tordue: pourquoi etant donne le typdef ci-dessus, je
ne peux pas definir mes fonctions etat de la facon suivante:

state start
{
faire_quelque_chose_avec_le_context(context);
return l_etat_suivant;
}

en lieu et place de

int start(struct ibsm_context *context)
{
faire_quelque_chose_avec_le_context(context);
return l_etat_suivant;
}

--
Bertrand Mollinier Toublet
"Reality exists" - Richard Heathfield, 1 July 2003

2 réponses

1 2 3
Avatar
Erwan David
Tobias Oed écrivait :


... si la semantique de la declaration plus haut est "f n'utilise pas ce
parametre" alors a mon avis le compilo peut choisir de ne pas evaluer a*b+c
dans la fonction g (sans avoir la definition de f, juste la declaration)
car il sait que f se fiche de sa valeur.
Tobias.


et les effets de bords dans l'évaluation ?

--
Monde de merde

Avatar
Tobias Oed
Erwan David wrote:

Tobias Oed écrivait :


... si la semantique de la declaration plus haut est "f n'utilise pas ce
parametre" alors a mon avis le compilo peut choisir de ne pas evaluer
a*b+c dans la fonction g (sans avoir la definition de f, juste la
declaration) car il sait que f se fiche de sa valeur.
Tobias.


et les effets de bords dans l'évaluation ?


Dans un message precedant, j'avais ecrit:

Tobias Oed wrote:
Si l'expression a des effets secondaires, c'est plus possible.


Tobias.

--
unix http://www.faqs.org/faqs/by-newsgroup/comp/comp.unix.programmer.html
clc http://www.eskimo.com/~scs/C-faq/top.html
fclc (french): http://www.isty-info.uvsq.fr/~rumeau/fclc/


1 2 3