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

7 réponses

1 2 3
Avatar
Pierre Maurette
[...]
Au fait, on est sur quel forum ?
fr.rec.animaux ?

Même ED parlait d'âne, il y une petite heure. C'est tout dire, c'est en
charte.

--
Pierre Maurette

Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

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 ;-))


&&fonction est permis?

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.


?


C'est valide et ça se comporte comme fonction.

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


J'ai même l'impression que tu es fatigué :-)

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
Emmanuel Delahaye
Oui, ici aussi c'est la grande transhumance, on voit plein de grands V dans
le ciel.


Ce sont des convois de grippe aviaire...

--
C is a sharp tool

Avatar
Antoine Leca
Jean-Marc Bourguet wrote:
&&fonction est permis?


Non, c'est même spécifiquement marqué comme devant générer un diagnostic.

Mea culpa.
[Exit]


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


?


C'est valide et ça se comporte comme fonction.


Oui ; mais ce n'est pas différent de ********&fonction


Il est tard, je dois m'en aller...


J'ai même l'impression que tu es fatigué :-)


Oui, on dirait bien ;-)

Cela doit être à cause du temps. Heureusement qu'aujourd'hui on a du soleil
:-).


Antoine



Avatar
Charlie Gordon
"Antoine Leca" wrote in message
news:dj7osp$sah$
Jean-Marc Bourguet wrote:
&&fonction est permis?


Non, c'est même spécifiquement marqué comme devant générer un diagnostic.


En fait, il y a deux cas distincts:

& & fonction doit générer un diagnostique.

&& fonction aussi mais pour des raisons différentes : && est un opérateur
binaire ;-)

--
Chqrlie.


Avatar
Antoine Leca
Charlie Gordon wrote:
&& fonction aussi mais pour des raisons différentes : && est un
opérateur binaire ;-)


Oui :-)
D'ailleurs, le diagnostic généré par gcc n'est pas des plus clairs :

C> gcc -W -Wall -ansi f.c
f.c: In function `main':
f.c:13: error: label `fonction' used but not defined


8-S Pioche !


Antoine
(Qui a pioché deux fois avant de comprendre. Fatigué.)

Avatar
Charlie Gordon
"Antoine Leca" wrote in message
news:djb3ht$g81$
Charlie Gordon wrote:
&& fonction aussi mais pour des raisons différentes : && est un
opérateur binaire ;-)


Oui :-)
D'ailleurs, le diagnostic généré par gcc n'est pas des plus clairs :

C> gcc -W -Wall -ansi f.c
f.c: In function `main':
f.c:13: error: label `fonction' used but not defined


C'est une extension gcc : && unaire est l'opérateur qui permet de prendre
l'adresse d'un label pour initialiser des pointeurs ou des tableaux de labels
utilisables pour goto *label; On utilise cela dans les interprêtes de byte code
efficaces.

--
Chqrlie.


1 2 3