bon c'est vraiment parce que tu le demandes
ceci est valide en C:
void foo1(char* message)
{
printf("foo1: %s\n", message);
}
void foo2(char* message)
{
printf("foo2: %s\n", message);
}
typedef void (*FOO)(char*);
FOO foo (int i)
{
switch(i)
{
case 1:
return foo1;
case 2:
return foo2;
}
printf("erreur: foo%d n'est pas definie, utilisera foo1\n", i);
return foo1;
}
int main(void)
{
foo(1)("message");
foo(2)("message");
foo(3)("message");
return 0;
}
résultat affiché:
foo1: message
foo2: message
erreur: foo3 n'est pas définie, utilisera foo1
foo1: message
je reconnais que l'on y gagne pas grand chose (i.e. rien), mais ça a le mérite d'être rigolo..
Pour ce qui est d'enlever le default c'est pas une bonne idée, il faut que ta fonction retourne quelque chose dans tous les cas (tu peux aussi retourner à l'extérieur du switch comme dans foo ci-dessus, cela revient au même), si l'appel est incorrecte un message d'erreur est le bien venu aussi, ça fait gagner du temp au débuggage. En C, on l'elliminerait de la compilation finale par un #ifdef , malheureusement cela n'existe pas en NWSCRIPT (pas même avec les extensions du compilateur de Torlack je crois).
PS:
Ce n'est valide que depuis la norme ANSI machin (je ne sais plus laquelle)
avant, notamment en K&R, les appels par pointeur vers une fonction devaient se faire ainsi:
(*foo(1))("message");
maintenant les deux sont valides
Donc si tu utilises un compilateur nostalgique tu auras peut-être un problème .
|