elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C]Es posible tener una funcion en un struct?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C]Es posible tener una funcion en un struct?  (Leído 570 veces)
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
[C]Es posible tener una funcion en un struct?
« en: 26 Febrero 2019, 01:16 »

Es posible (en C) tener una función dentro de un struct? Algo así más o menos:
Código
  1. struct foo
  2. {
  3.    int bar = 3;
  4.    int sumar(int x, int y);
  5. };
  6.  
  7. int sumar(int x, int y)
  8. {
  9.    x += y;
  10. }
  11.  
  12. int main()
  13. {
  14.    struct foo asd;
  15.    int spam = asd.bar;
  16.    asd.sumar(5, 5);
  17.    return 0;
  18. }
  19.  
Escuche que en C++ se podía, pero como lo puedo hacer en C?
La idea seria tener funciones mas organizadas, se podría con POO si estuviera en C++, pero sinceramente me da asco la forma en que se declaran clases en C++  ;-), aparte que solo puedo usar C ahora.
Saludos


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 754



Ver Perfil
Re: [C]Es posible tener una funcion en un struct?
« Respuesta #1 en: 26 Febrero 2019, 01:35 »

Creo que puramente en C no se puede ya que C no está orientado a objetos como podría estarlo C++.
Decirte que lo que sí puedes hacer es crear un <struct> en C++ y entonces si puedes declarar una función miembro del <struct>.
Pero tienes algunos errores como inicializar la variable y luego tu función no tiene sentido, devuelve un <int> y no tiene ningún <return>...

Te dejo el siguiente código que compilado como un fuente de C++ sí funciona (g++ test.cpp -o test).
Si lo tratas como un fuente C, no va a funcionar (gcc test.c -o test).
Código
  1. #include <stdio.h> // #include <cstdio> para C++ mejor
  2.  
  3. struct foo{
  4.    int x;
  5.    int sumar(int y){
  6.        return x+y;
  7.    }
  8. };
  9.  
  10. int main(){
  11.    foo my_foo;
  12.    my_foo.x = 3;
  13.    printf("%d\n", my_foo.x); // salida: 3
  14.    int suma = my_foo.sumar(5);
  15.    printf("%d\n", suma); // salida: 8
  16. }

No sé si te sirve  :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C]Es posible tener una funcion en un struct?
« Respuesta #2 en: 26 Febrero 2019, 01:38 »

Creo que puramente en C no se puede ya que C no está orientado a objetos como podría estarlo C++.
Decirte que lo que sí puedes hacer es crear un <struct> en C++ y entonces si puedes declarar una función miembro del <struct>.
Pero tienes algunos errores como inicializar la variable y luego tu función no tiene sentido, devuelve un <int> y no tiene ningún <return>...

Te dejo el siguiente código que compilado como un fuente de C++ sí funciona (g++ test.cpp -o test).
Si lo tratas como un fuente C, no va a funcionar (gcc test.c -o test).
Código
  1. #include <stdio.h> // #include <cstdio> para C++ mejor
  2.  
  3. struct foo{
  4.    int x;
  5.    int sumar(int y){
  6.        return x+y;
  7.    }
  8. };
  9.  
  10. int main(){
  11.    foo my_foo;
  12.    my_foo.x = 3;
  13.    printf("%d\n", my_foo.x); // salida: 3
  14.    int suma = my_foo.sumar(5);
  15.    printf("%d\n", suma); // salida: 8
  16. }

No sé si te sirve  :-X
Ah, que pena  :-(, pero talvez me sirva cuando este programando en C++
Gracias  :)
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 754



Ver Perfil
Re: [C]Es posible tener una funcion en un struct?
« Respuesta #3 en: 26 Febrero 2019, 01:49 »

Siempre puedes usar una función externa  :-X:
Código
  1. // declaracion de la struct
  2.  
  3. int sumar(struct foo my_foo, int y){
  4.    return my_foo.x + y;
  5. }
  6.  
  7. int main(){
  8.    struct foo my_foo;
  9.    my_foo.x = 2;
  10.    int suma = sumar(my_foo, 8); // suma = 10
  11. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Loretz

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: [C]Es posible tener una funcion en un struct?
« Respuesta #4 en: 26 Febrero 2019, 02:31 »

En C (y en C++) una struct puede tener un "puntero a función" como miembro, que no es lo mismo que una "función miembro" por supuesto, pero es la forma que puede usarse en C para asociar comportamiento a una struct.

Va un ejemplo:

Código:
#include <stdio.h>

struct foo {
    int bar;
    int(*pfun)(int, int); // puntero a función que devuelve int y que toma dos ints como parámetros.
};

int sumar(int x, int y)
{
    return x + y;
}

int multiplicar(int x, int y)
{
    return x * y;
}

int main()
{
    struct foo asd;
    asd.bar = 3;
    asd.pfun = &sumar;

    printf("suma = %i\n", asd.pfun(5, 5));

    asd.pfun = &multiplicar;
    printf("producto = %i\n", asd.pfun(5, 5));

    return 0;
}
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 319


Ver Perfil WWW
Re: [C]Es posible tener una funcion en un struct?
« Respuesta #5 en: 26 Febrero 2019, 15:59 »

Para complementar la excelente respuesta de Loretz, los nombres de las funciones funcionan como punteros inicializados y cuyo contenido es la direccion de memoria de esa funcion, por lo que el uso del & es opcional.

Código
  1. asd.pfun = &sumar;  
  2. // tambien puede escribirse sin &
  3. asd.pfun = sumar;
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines