J'essaie de convertir du code C++ en C et je rencontre des problèmes. Comment définir à l'intérieur d'une structure une fonction?
Comme ça:
typedef struct {
double x, y, z;
struct Point *next;
struct Point *prev;
void act() {sth. to do here};
} Point;
Non, vous ne pouvez pas définir une fonction dans un struct
en C.
Vous pouvez avoir un pointeur de fonction dans un struct
mais avoir un pointeur de fonction est très différent d'une fonction membre en C++, à savoir qu'il n'y a pas de pointeur implicite this
vers le contenant struct
exemple.
Exemple artificiel (démo en ligne http://ideone.com/kyHlQ ):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct point
{
int x;
int y;
void (*print)(const struct point*);
};
void print_x(const struct point* p)
{
printf("x=%d\n", p->x);
}
void print_y(const struct point* p)
{
printf("y=%d\n", p->y);
}
int main(void)
{
struct point p1 = { 2, 4, print_x };
struct point p2 = { 7, 1, print_y };
p1.print(&p1);
p2.print(&p2);
return 0;
}
Vous pouvez cependant avoir un pointeur de fonction dans une structure. mais pas de cette façon
vous pouvez le définir de cette façon
exemple:
typedef struct cont_func
{
int var1;
int (*func)(int x, int y);
void *input;
} cont_func;
int max (int x, int y)
{
return (x > y) ? x : y;
}
int main () {
struct cont_func T;
T.func = max;
}
Non, il n'est pas possible de déclarer une fonction à l'intérieur d'une structure en C.
C'est (une des) différences fondamentales entre C et C++.
Voir ce fil: http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html
Dans C
, il n'est pas autorisé de définir une méthode à l'intérieur d'un struct
. Vous pouvez définir un pointeur de fonction à l'intérieur d'une structure comme suit:
typedef struct {
double x, y, z;
struct Point *next;
struct Point *prev;
void (*act)();
} Point;
Vous devrez affecter le pointeur à une fonction spécifique chaque fois que vous instanciez le struct
.
L'idée est de mettre un pointeur sur une fonction à l'intérieur de la structure. La fonction est ensuite déclarée en dehors de la structure. C'est différent d'une classe en C++ où une fonction est déclarée à l'intérieur de la classe.
Par exemple: voler du code à partir d'ici: http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html
struct t {
int a;
void (*fun) (int * a);
} ;
void get_a (int * a) {
printf (" input : ");
scanf ("%d", a);
}
int main () {
struct t test;
test.a = 0;
printf ("a (before): %d\n", test.a);
test.fun = get_a;
test.fun(&test.a);
printf ("a (after ): %d\n", test.a);
return 0;
}
où test.fun = get_a;
affecte la fonction au pointeur dans la structure et test.fun(&test.a);
l'appelle.
Vous ne pouvez définir un pointeur de fonction que dans une structure en langage de programmation C différente de C++.