¿Es posible definir una función dentro de una estructura en C?

Estoy intentando convertir algún código C ++ a C y estoy teniendo problemas. ¿Es posible definir dentro de una estructura una función?

Me gusta esto:

typedef struct { double x, y, z; struct Point *next; struct Point *prev; void act() {sth. to do here}; } Point; 

No, no puedes definir una función dentro de una struct en C.

Aunque puede tener un puntero de función en una struct pero tener un puntero de función es muy diferente de una función miembro en C ++, es decir, this puntero no está implícito en la instancia de struct contiene.

Ejemplo elaborado (demostración en línea http://ideone.com/kyHlQ ):

 #include  #include  #include  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; } 

Puede tener un puntero de función en una estructura sin embargo. pero no de esta manera

Puedes definirlo de esta manera.

ejemplo:

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

No, no es posible declarar una función dentro de una estructura en C.

Esa es (una de) las diferencias fundamentales entre C y C ++.

Consulte este hilo: http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html

En C no está permitido definir un método dentro de una struct . Puede definir un puntero de función dentro de una estructura de la siguiente manera:

 typedef struct { double x, y, z; struct Point *next; struct Point *prev; void (*act)(); } Point; 

Deberá asignar el puntero a una función específica cada vez que cree una instancia de la struct .

La idea es poner un puntero a una función dentro de la estructura. La función se declara fuera de la estructura. Esto es diferente de una clase en C ++ donde una función se declara dentro de la clase.

Por ejemplo: robar código desde aquí: 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; } 

donde test.fun = get_a; asigna la función al puntero en la estructura, y test.fun(&test.a); lo llama

Solo puede definir un puntero de función en una estructura en lenguaje de progtwigción C que sea diferente de C ++.