- p. 1/19
Plan
- p. 2/19
Utilité des pointeurs de fonction
- p. 3/19
Un premier exemple
Introduction
#include <stdio.h>
Pointeur de fonctions
#include <stdlib.h>
Erreurs courante en C
//declaration de fonction
int fonct1(int a)
{
fprintf(stdout,"Je suis fonct1(%d)\n",a);
return(0);
}
int main()
{// declaration de pointeur de fonction
int (*foncPtr)(int a);
foncPtr=&fonct1;
(*foncPtr)(10);
return(0);
} - p. 4/19
Comprendre les déclarations
- p. 5/19
- p. 6/19
En fait, c’est un peu plus compliqué...
foncPtr=fonct1;
foncPtr(10);
- p. 7/19
Introduction
#include <stdio.h>
Pointeur de fonctions
#include <stdlib.h>
Erreurs courante en C
//declaration de fonction
int fonct1(int a)
{
fprintf(stdout,"Je suis fonct1(%d)\n",a);
return(0);
}
int main()
{// declaration de pointeur de fonction
int (*foncPtr)(int a);
foncPtr=fonct1;
foncPtr(10);
return(0);
} - p. 8/19
Un autre exemple
Introduction
int main(void)
Pointeur de fonctions
{
Erreurs courante en C
//comparaison de deux entiers int i,t[6]={1,5,2,3,6,4};
- p. 9/19
Introduction
void trie(int tableau[], int taille, int (fcomp)(int, int))
Pointeur de fonctions
{
Erreurs courante en C
int i,j,min;
//tri par permuation avec fcomp comme fonction de comparaiso
for (i=0;i<taille;i++)
{
min=tableau[i];
for (j=i+1;j<taille;j++)
if (fcomp(tableau[i],tableau[j]))
{
min = tableau[j];
tableau[j]=tableau[i];
tableau[i]=min;
}
}
return ;
} - p. 10/19
Passage de fonction par référence
- p. 11/19
fcomp=croissant;
trie(t, 6, fcomp);
for(i=0;i<6;i++)
fprintf(stdout," %d ",t[i]);
fprintf(stdout,"\n");
changeOrdre(&fcomp,decroissant);
trie(t, 6, fcomp);
for(i=0;i<6;i++) - p. 12/19
Introduction
Pointeur de fonctions
Erreurs courante en C
- p. 13/19
Confusion entre == et =
Introduction
■ À ne pas faire:
Pointeur de fonctions
if (size = 0) ....
Erreurs courante en C
■ Détection: l’option -Wall du compilateur avertit le
programmeur (warning)
- p. 14/19
Confusion entre opérateurs logiques et binaires
- p. 15/19
Problèmes de macros
■ On n’écrit pas
#define MAX=10
◆ Erreur détectée à la compilation, mais lors de l’utilisation
de MAX (la ligne référencée n’est pas celle de la définition
de MAX).
■ On écrit
#define MAX 10
■ En cas de doute, on peut utiliser gcc -E pour vérifier
l’expansion correcte des macros.
- p. 16/19
Fonctions retournant un caractère getc...
Introduction char c;
Pointeur de fonctions while ( (c = getchar ()) != EOF)
Erreurs courante en C ...
■ La fonction getchar retourne un entier
...
- p. 18/19
Et les plus courantes...
- p. 19/19