Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : C - les pointeurs de fonction
(Article écrit par Roméo Rapido et extrait d'A-News (Amiga News) - septembre 1990)
|
|
Nous allons aborder une notion de C assez ardue : les pointeurs de fonction. Mais, comme c'est la rentrée,
je ne vais pas vous faire du "bourrage de crâne" avec un listing de 10 km ; vous allez saisir le principal
en une vingtaine de lignes.
Avant tout, précisons autant que faire ce peut ce qu'est un pointeur de fonction : c'est la même chose
qu'un pointeur de caractère ou d'entier,
la seule différence réside dans le fait qu'il pointe sur la première instruction de la fonction considérée.
Dans notre exemple, nous allons initialiser un tableau de pointeurs de fonctions puis nous ferons appel à
ces fonctions par une boucle FOR. Le deuxième exemple est plus compliqué puis que c'est le retour de la
fonction qui permet d'appeler la fonction suivante.
Bien entendu, comme pour les pointeurs de caractères, tout est permis ou presque. Il est possible de faire
des affectations du style f = Fonction1 (remarquez que, comme pour les tableaux, le nom est un pointeur sur
le premier élément, ici le nom est un pointeur sur le début de la fonction) puis d'utiliser f dans un appel
comme celui-ci :
Bien que cela soit possible, il vaut mieux éviter les opérations sur les pointeurs. Il est fortement déconseillé
d'écrire, par exemple, f++ si f est un pointeur de fonction. Mais en principe, tout compilateur C normalement
constitué doit retourner une erreur du type "opération illégale sur les pointeurs de fonction".
Il est tout de même possible de faire de telles opérations en passant par des castings (changement de type) exemple :
Le pointeur de fonction a maintenant une adresse impaire ce qui provoquera une erreur d'adressage si l'on
tente d'exécuter le code de la fonction. Il convient donc de ne pas utiliser ce genre de bidouille ou, du moins,
de les manipuler avec une extrême précaution. Vous savez maintenant l'essentiel sur les pointeurs de fonctions
et leur mode d'utilisation. Un dernier détail : mais à quoi ça sert ? Une des applications qui me vient à
l'esprit est la programmation d'analyseurs syntaxiques et d'automates.
|