.
Estas entregas son breves pero consisas y van a lo que es nesesario.

Antes de veniar aquí expuse una duca en elhacker.net para ver si mi conjetura era cierta.

Código: Seleccionar todo

http://foro.elhacker.net/programacion_cc/duda_punteros_a_funciones-t316718.0.html
Bueno en base a mi migración a de vb6 a C e indagado TODOS los ricones de C y me lo voy a exprimir hasta dejarlo en los huesos.

Un puntero a una funcion es ideal si no se quiere llamar de forma indirectamente a una función y esto a mi forma de pensar es genial si se crean plugins o se quiere programar en base a eventos ( voy a crear una clase apra plugins en C mas adelante )

Como se usan?

[congetura]
* Creo y supongo que se declara con el tipo que devuelve la funcion, similar a la declaracion de un prototipo pero difiriendo de esta.
[/congetura]

Pues mi congetura fue cierta se declaran igual que los prototipos solo que difieren de los mismo, es decir:

* Se declaran como prototipos PERO sin nombres de variables.

Un ejemplo basico:

Código: Seleccionar todo


#include<stdio.h>
#include<stdlib.h>

char* strcpy(char* str_dest,char* str_src)
/**
    Copia [*str_src] a [*str_dest].
    Retorna el puntero a [str_dest]
**/
{
    char *copyreturn = str_dest;
    while(*(str_dest++)=*(str_src++));
    return copyreturn;
}
char* clone_string(char *msg,unsigned int lenmsg, char *(*Pcopy)(char*,char*))
/*
    Clonea una longitud de *msg y retorna el puntero hacia la misma.
    *msg Cadena entrante a copiarse.
    lenmsg Longitud de *msg.
    *Pcopy Puntero a el proceso que copiara a msg a un nuevo buffer.
*/
{
    char *cadena = (char*)malloc(sizeof(char)*(++lenmsg));
    return Pcopy(cadena,msg);
}
int main() {
    char *(*pf1)(char*,unsigned int,char*(*)(char*,char*)) = clone_string;
    char *res = pf1((char*)"Hola Mundo",10,strcpy);
    printf ("%s",res);
    free(res);
    getchar();
    return 0;
}

Cabe mencionar que esta tecnica es fasinante si se desea programar en base a eventos en C y esto era lo que estaba buscando desde hace tiempo para transladar mis codigos de vb6 a C [ Troyanos, spyware, multimedia, controles, etc... ].

Temibles Lunas!¡.
.
Web: http://infrangelux.sytes.net/
ScanX: http://ScanX.sytes.net/
FileX: http://FileX.sytes.net/
Blog: http://BlogX.sytes.net/

Imagen


The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi religion
Responder

Volver a “Fuentes”