una - todas las funciones de c++




Funciones en estructura (5)

En C, las estructuras pueden contener valores de datos y no los punteros de función. No permitido en C. pero el siguiente funciona literalmente bien cuando se lo marca con gcc.

enter code here

#include <stdio.h>

struct st_func_ptr{
        int data;
        int (*callback) ();
};

int cb(){
        printf(" Inside the call back \n");
        return 0;
}

int main() {
        struct st_func_ptr sfp = {10, cb};

        printf("return value = %d \n",sfp.callback());

        printf(" Inside main\n");
        return 0;
}

Entonces, estoy confundido ...

¿Pueden las estructuras contener funciones?


No se puede. La estructura no puede contener una declaración de una función, pero pueden contener la definición de una función. La estructura solo puede contener tipos de datos, punteros, indicadores para diferentes funciones. Puede hacer un puntero a una función y luego acceder desde la estructura.

#include<iostream>
#include<cstring>
using namespace std;

struct full_name
{
  char *fname;
  char *lname;
  void (*show)(char *,char*);
};

void show(char *a1,char * a2)
{
    cout<<a1<<"-"<<a2<<endl;
}

int main()
{  

 struct full_name loki;
 loki.fname="Mohit";
 loki.lname="Dabas";
 loki.show=show;
 loki.show(loki.fname,loki.lname);


 return 0;

}

Pueden, pero no hay una ventaja inherente en la programación habitual de C.

En C, todas las funciones están en el espacio global de todos modos, por lo que no se esconde información metiéndolas en una función. El ejemplo de paxdiablo es una forma de organizar las funciones en una estructura, pero debe ver que tiene que eliminar la referencia de cada una de ellas para usarla.

La estructura organizativa estándar de C es el archivo, con las interfaces en el encabezado y las implementaciones en el origen.

Así es como se hace libc y así es como casi todas las bibliotecas C están listas.

Los compiladores Moder C le permiten definir e implementar funciones en el mismo archivo fuente, e incluso implementar funciones estáticas en archivos de encabezado. Desafortunadamente, esto genera cierta confusión en cuanto a qué es lo que pasa, y usted puede obtener soluciones inusuales como funciones de integración en estructuras, programas de fuente única sin encabezados, etc. Se pierde la ventaja de separar la interfaz de la implementación de esa manera.


Sí, es posible declarar una función y la definición de la función no está permitida, y ese debería ser el puntero de la función.

Está basado en la estructura etiquetada C99.

Lokesh V


edite la ambigüedad despejada con el uso de 'tipos de datos'

No en C. struct tipos solo pueden contener datos.

De la Sección 6.7.2.1 del Estándar ISO C99.

Una estructura o unión no debe contener un miembro con tipo de función o incompleto (por lo tanto, una estructura no debe contener una instancia de sí mismo, pero puede contener un puntero a una instancia de sí mismo), excepto que el último miembro de una estructura con más de un miembro nombrado puede tener tipo de matriz incompleta; dicha estructura (y cualquier unión que contenga, posiblemente recursivamente, un miembro que sea tal estructura) no deberá ser un miembro de una estructura o un elemento de una matriz.





struct