Pointeurs de fonction en C
Fermé
pierre
-
19 déc. 2003 à 17:43
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 8 sept. 2007 à 11:33
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 8 sept. 2007 à 11:33
A voir également:
- Pointeurs de fonction en C
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Excel renvoyer la valeur d'une cellule en fonction d'une autre - Forum Logiciels
- Snapchat ils m'ont ajouté par la fonction recherche - Forum Snapchat
15 réponses
Première remarque déclarer 15 instructions par ligne c'est pas ce qu'on peut appeller quelque chose de clair alors imagine tout un projet avec +100 lignes de code la belle m*** que tu devras ou d'autres (en Open Source) se taper.
Bon analyse du code, tu déclares des entiers signés, pointeurs d'entiers signés ... j'ai pas bien pigé le but du "int (*pf)();" j'aurais plutôt tendance à utiliser une pointeur d'entier pour récupérer la valeur de sortie de la fonction mais bon passons donc le pointeur p contient l'adresse de i puis pf ... la que je perd mon latin puis le reste semble correcte. Faut m'expliquer le but de pointer sur la fonction ...
Bon analyse du code, tu déclares des entiers signés, pointeurs d'entiers signés ... j'ai pas bien pigé le but du "int (*pf)();" j'aurais plutôt tendance à utiliser une pointeur d'entier pour récupérer la valeur de sortie de la fonction mais bon passons donc le pointeur p contient l'adresse de i puis pf ... la que je perd mon latin puis le reste semble correcte. Faut m'expliquer le but de pointer sur la fonction ...
Bon finalement j'ai touché ton code pour voir ce que ça donnait vraiment et apparement il n'y a aucun problème.
Mon pointeur de fonction sert à choisir la fonction il peut y avoir deux fonctions appellée en fonction de la valeur entrée.
Qd tu dis qu'il n'y a aucun pb ça veut dire que ça affiche -1 si tu as rentré le chiffre 1, et 10 si tu as rentré le chiffre 2?
Qd tu dis qu'il n'y a aucun pb ça veut dire que ça affiche -1 si tu as rentré le chiffre 1, et 10 si tu as rentré le chiffre 2?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pas tout à fait ... en fait selon ton code ça donne toujours -1 car tu affectes en dernier pf par f1.
#include <stdio.h>
#include <stdlib.h>
/* prototypes declaration */
signed int function1();
signed int function2();
/* main function defintion */
signed int main()
{
signed char i;
signed int x;
signed int y;
signed int *p;
i = 0;
p = &x;
while(i < 2)
{
printf("Interation = %i\n\n", i);
printf("Enter 1 or 2: ");
scanf("%i", p);
switch(i)
{
case 1:
{
y = function1();
}
break;
case 2:
{
y = function2();
}
break;
default:
{
y = 0;
}
break;
}
printf("Value = %i\n\n", y);
i++;
}
system("pause");
return EXIT_SUCCESS;
}
/* other functions definition */
signed int function1()
{
return 0;
}
signed int function2()
{
return 1;
}
#include <stdlib.h>
/* prototypes declaration */
signed int function1();
signed int function2();
/* main function defintion */
signed int main()
{
signed char i;
signed int x;
signed int y;
signed int *p;
i = 0;
p = &x;
while(i < 2)
{
printf("Interation = %i\n\n", i);
printf("Enter 1 or 2: ");
scanf("%i", p);
switch(i)
{
case 1:
{
y = function1();
}
break;
case 2:
{
y = function2();
}
break;
default:
{
y = 0;
}
break;
}
printf("Value = %i\n\n", y);
i++;
}
system("pause");
return EXIT_SUCCESS;
}
/* other functions definition */
signed int function1()
{
return 0;
}
signed int function2()
{
return 1;
}
déjà au nivo de la longeur ça me plait pas trop.
En plus je vois pas l'intérêt du switch. (pti détail je programme en C). Pourkoi pas utiliser un if à ce moment là?
ça doit être plus facile avec un tableau de pointeur de fonction
merci qd même
En plus je vois pas l'intérêt du switch. (pti détail je programme en C). Pourkoi pas utiliser un if à ce moment là?
ça doit être plus facile avec un tableau de pointeur de fonction
merci qd même
Ca revient au même double if ou switch mais à mon avis 2 if ça fait limite alors qu'un switch c'est plus clair. Si tu veux faire du code ultra court t u peux aussi essayer Visual Basic ;-)
Je sais que je debarque 10 ans apres, mais bon.
Deja le switch c'est tres mauvais pour la simple et bonne raison que les oublis du break sont tres fréquents.
Ensuite les tableaux de pointeurs sur fonction sont une tres bonne idee :
- Plus performant que les if a repetition sur la meme variable des que ca depasse 5 tests environ
- Meilleur decoupage du code surtout pour les gestions d'etats (une fonction appele alors qu'avec des if sur plusieurs variables on risque d'avoir plusieurs cas qui match au lieu d'un seul).
La longueur du code n'est pas a mettre en rapport avec sa vitesse d'execution.
PS : Les tableaux de pointeurs sur fonction ne sont pas connu des novices qui ont alors du mal a comprendre le code. Les pointeurs sont supra puissant en C, mais il faut faire attention a ne pas avoir trop de sous niveau (tableau multi-dimension).
Deja le switch c'est tres mauvais pour la simple et bonne raison que les oublis du break sont tres fréquents.
Ensuite les tableaux de pointeurs sur fonction sont une tres bonne idee :
- Plus performant que les if a repetition sur la meme variable des que ca depasse 5 tests environ
- Meilleur decoupage du code surtout pour les gestions d'etats (une fonction appele alors qu'avec des if sur plusieurs variables on risque d'avoir plusieurs cas qui match au lieu d'un seul).
La longueur du code n'est pas a mettre en rapport avec sa vitesse d'execution.
PS : Les tableaux de pointeurs sur fonction ne sont pas connu des novices qui ont alors du mal a comprendre le code. Les pointeurs sont supra puissant en C, mais il faut faire attention a ne pas avoir trop de sous niveau (tableau multi-dimension).
Juste une petite précision que j'ai oublie :
Un tableau de pointeur sur fonction est quasiment aussi rapide qu'un switch s'il est precompile (mis en dur dans le code/non dynamique), car le switch fonction comme un tableau puisqu'il se sert de la valeur comme un index pour faire le saut au code respectant la condition.
Attention ne pas oublier que les fonctions dégradent aussi les performances.
Un tableau de pointeur sur fonction est quasiment aussi rapide qu'un switch s'il est precompile (mis en dur dans le code/non dynamique), car le switch fonction comme un tableau puisqu'il se sert de la valeur comme un index pour faire le saut au code respectant la condition.
Attention ne pas oublier que les fonctions dégradent aussi les performances.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
7 sept. 2007 à 18:57
7 sept. 2007 à 18:57
Salut,
Deja le switch c'est tres mauvais pour la simple et bonne raison que les oublis du break sont tres fréquents.
alors ce n'est pas si grave que ça ;-))
une accolade on l'oublie plus rapide qu'un break :-D
Deja le switch c'est tres mauvais pour la simple et bonne raison que les oublis du break sont tres fréquents.
alors ce n'est pas si grave que ça ;-))
une accolade on l'oublie plus rapide qu'un break :-D
Oui, mais l'oubli d'une accolade provoque une erreur du compilateur et certains éditeurs qui gèrent l'indentation on un décalage incohérent.
Surtout les editeurs ne mettent pas les break, alors qu'ils ajoutent tres souvent l'accolade fermante quand on en ouvre une.
Surtout les editeurs ne mettent pas les break, alors qu'ils ajoutent tres souvent l'accolade fermante quand on en ouvre une.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 sept. 2007 à 11:33
8 sept. 2007 à 11:33
Surtout les editeurs ne mettent pas les break, alors qu'ils ajoutent tres souvent l'accolade fermante quand on en ouvre une.
ben, voilà ce qui peut se passer si on laisse les éditeurs faire le travail à notre place ;-)
ben, voilà ce qui peut se passer si on laisse les éditeurs faire le travail à notre place ;-)