Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Insérer une fonctions dans une structure?

27 réponses
Avatar
frederic
Bonjour,

y-a-t'il moyen en C, d'insérer une ou des fonctions dans une structure de données?

typedef struct Complex Complex;
struct Complex {
int value;
int (*fn)();
char *mesg;
};

Lorsque je compile comme ça, le compilo ne cris pas, mais par
contre, il hurle si j'ai la déclaration suivante:

Complex table[] = {
ONE, double(ONE), "premier message",
TWO, double(TWO), "deuxième message",
THREE, double(TREE), "troisième message",
FOUR, double(FOUR), "quatrième message",
};

pour info:
int double(int i)
{
return i * i;
}

enum {
ONE = 10,
TWO,
THREE,
FOUR,
};
--
Frédéric

10 réponses

1 2 3
Avatar
Antoine Leca
Pierre Maurette wrote:

Code pour faire mumuse par les jours pluvieux que nous vivons:


S'il pleut vraiment beaucoup par chez toi, d'abord saches que cela a l'air
de s'arranger (vu de chez moi ;-)), et sinon tu peux récupérer un compilo
16-bits MSDOS (TC2 chez Borland) et faire tourner ton exemple en modèle
compact (pointeurs vers fonction sur 16 bits et pointeurs vers données sur
32 bits; et %p de printf, il veut des pointeurs données...)


Antoine :-)

Avatar
Pierre Maurette
Nicolas Cherel wrote:

En passant, pour les pointeurs de fonction : quelle est la différence
entre "&fonction" et "fonction" ?


À l'utilisation, je crois qu'il n'y en a pas tant qu'il n'y a pas de macros
"fonction".
Je signalais un peu plus haut un autre danger potentiel à l'utilisation

du &. C'est le cas où "fonction" serait ou deviendrait en cours de
développement un pointeur vers fonction. A moins d'utiliser le & pour
justement être warné.

--
Pierre Maurette


Avatar
Pierre Maurette
Pierre Maurette wrote:

Code pour faire mumuse par les jours pluvieux que nous vivons:


S'il pleut vraiment beaucoup par chez toi, d'abord saches que cela a l'air
de s'arranger (vu de chez moi ;-)),
C'est en Espagne, chez toi ? Parce que les pluies orageuses et

violentes de début septembre venaient effectivement de par là-bas, en
traversant le golfe du Lion. Sinon, dans la jungle/pinède qui me sert
de jardin à Sète, il pleut depuis deux jours des piafs par nuées dont
je pense qu'ils partent vers le sud. A moins qu'ils n'arrivent du nord
? Le clebs Garrigou, un épagneul chasseur - de mouches - tendance
Rantanplan, était mort de trouille ...


et sinon tu peux récupérer un compilo
16-bits MSDOS (TC2 chez Borland) et faire tourner ton exemple en modèle
compact (pointeurs vers fonction sur 16 bits et pointeurs vers données sur
32 bits; et %p de printf, il veut des pointeurs données...)
C'est clair. Je dois avoir le compilo dans un coin. Mais il faut dire

que en dehors de fclc, je n'affiche que rarement des pointeurs, au
profit du débogueur.



--
Pierre Maurette


Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

Nicolas Cherel wrote:

En passant, pour les pointeurs de fonction : quelle est la différence
entre "&fonction" et "fonction" ?


À l'utilisation, je crois qu'il n'y en a pas tant qu'il n'y a pas de macros
"fonction".

Techniquement (et toujours sans macros en vue), le premier est un pointeur
vers une fonction et le second est un désignateur de fonction : ce sont donc
deux entités différentes du point de vue de la grammaire. Mais l'on peut
utiliser l'un à la place de l'autre (et ce même sur les très vieux
compilateurs, pour autant que je me souvienne), sauf dans des constructions
tordues (par exemple comme arguments de & ou de sizeof, où seule la seconde
forme sera autorisée).


sizeof &fonction n'est pas permi? Pourquoi (ca passe ou j'ai
essaye).

Dans le genre amusant, il y a bien sur ********fonction.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Pierre Maurette
[...]
sizeof &fonction n'est pas permi? Pourquoi (ca passe ou j'ai
essaye).
VC 7:

printf("%lun", sizeof fonction);
donne:
error C2070: 'int (__cdecl *)(char)' : opérande sizeof non conforme

Mais
int(*fonct)() = fonction;
printf("%lun", sizeof fonct);
passe bien sûr et donne la taille d'un pointeur de fonction.

Dans le genre amusant, il y a bien sur ********fonction.
C'est pareil que ****************************************fonction ?


--
Pierre Maurette

Avatar
Pierre Maurette
(supersedes )

[...]
sizeof &fonction n'est pas permi? Pourquoi (ca passe ou j'ai
essaye).
VC 7:

['fonction' est un désignateur de fonction]
printf("%lun", sizeof fonction);
donne:
error C2070: 'int (__cdecl *)(char)' : opérande sizeof non conforme

Mais
int(*fonct)() = fonction;
printf("%lun", sizeof fonct);
passe bien sûr et donne la taille d'un pointeur de fonction.

Dans le genre amusant, il y a bien sur ********fonction.
C'est pareil que ****************************************fonction ?



--
Pierre Maurette

Avatar
Emmanuel Delahaye
En passant, pour les pointeurs de fonction : quelle est la différence
entre "&fonction" et "fonction" ?.


Aucune. L'un use plus le clavier et les disques durs que l'autre...

--
C is a sharp tool

Avatar
Harpo
Pierre Maurette wrote:

S'il pleut vraiment beaucoup par chez toi, d'abord saches que cela a
l'air de s'arranger (vu de chez moi ;-)),
C'est en Espagne, chez toi ? Parce que les pluies orageuses et

violentes de début septembre venaient effectivement de par là-bas, en
traversant le golfe du Lion. Sinon, dans la jungle/pinède qui me sert
de jardin à Sète, il pleut depuis deux jours des piafs par nuées dont
je pense qu'ils partent vers le sud. A moins qu'ils n'arrivent du nord
? Le clebs Garrigou, un épagneul chasseur - de mouches - tendance
Rantanplan, était mort de trouille ...


Mon conseil ; demandez l'asile politique en Bretagne, ici il pleut
depuis 2 haures seulement,
--
Enfin cet après-midi.


Avatar
Antoine Leca
Pierre Maurette wrote:
Pierre Maurette wrote:
S'il pleut vraiment beaucoup par chez toi, d'abord saches que cela a
l'air de s'arranger (vu de chez moi ;-)),
C'est en Espagne, chez toi ?



Oui, un peu au sud de Valence.

Parce que les pluies orageuses et violentes de début septembre
venaient effectivement de par là-bas, en traversant le golfe du Lion.


Ah non, celles-là ce n'est pas nous, c'est les Catalans (au nord de chez
moi) ; d'ailleurs ils ont été plus que très mouillés vers Gérone...

Mais pour nous, cette semaine est franchement tristounette pour le moment,
et comme c'est rare par ici :^B je le remarque ; mais bon, cela a l'air de
vouloir s'arrange :-)))


Sinon, dans la jungle/pinède qui me sert
de jardin à Sète, il pleut depuis deux jours des piafs par nuées dont
je pense qu'ils partent vers le sud. A moins qu'ils n'arrivent du nord


Oui, ici aussi c'est la grande transhumance, on voit plein de grands V dans
le ciel.


Au fait, on est sur quel forum ?


Antoine


Avatar
Antoine Leca
Jean-Marc Bourguet wrote:
"Antoine Leca" writes:
Mais l'on peut utiliser l'un à la place de l'autre [...]
sauf dans des constructions tordues (par exemple comme
arguments de & ou de sizeof, où seule la seconde forme sera
autorisée).


sizeof &fonction n'est pas permi? Pourquoi (ca passe ou j'ai
essaye).


M'suis gaufré. Avant, il y avait écrit "première", et puis j'ai modifié. À
tord.

En fait, entre & (qui fait une différence entre les deux cas, les deux
formes sont valides, tant &&fonction comme &fonction, mais ne sont pas
interchangeables ;-)) et sizeof (où sizeof fonction est clairement illégal,
tandis que sizeof &fonction donne un petit entier positif), et j'avais
indûment assimilé.


Dans le genre amusant, il y a bien sur ********fonction.


?

Il est tard, je dois m'en aller... mais je veux bien que tu m'expliques,
pour demain


Antoine


1 2 3