Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 8 Julio 2015, 15:06 PM

Título: Porque es posible llamar a una función puntero sin usar "*" ?
Publicado por: patilanz en 8 Julio 2015, 15:06 PM
Hola,
teniendo esto:
Código (cpp) [Seleccionar]
typedef bool (_funct)(char* buffer,int maxLength);
_funct * funct = (_funct*)GetProcAddress(library, "funct");
//Porque es posible llamar a un puntero funcion de esta manera? :
funct(..);
//Me parece mas logico asi:
(*funct)(..);


Saludos
Título: Re: Porque es posible llamar a una función puntero sin usar "*" ?
Publicado por: BloodSharp en 8 Julio 2015, 16:50 PM
Cita de: patilanz en  8 Julio 2015, 15:06 PM
Hola,
teniendo esto:
Código (cpp) [Seleccionar]
typedef bool (_funct)(char* buffer,int maxLength);
_funct * funct = (_funct*)GetProcAddress(library, "funct");
//Porque es posible llamar a un puntero funcion de esta manera? :
funct(..);
//Me parece mas logico asi:
(*funct)(..);


Saludos

Teniendo en cuenta que funct es un puntero, el compilador comprende que en assembler seria algo equivalente a lo siguiente:
Código (asm) [Seleccionar]
push "funct";
push library;
call GetProcAdress;
mov funct,eax;
push maxLength;
push buffer;
call [funct];
add esp,8;



B#
Título: Re: Porque es posible llamar a una función puntero sin usar "*" ?
Publicado por: ivancea96 en 8 Julio 2015, 16:56 PM
Por parte de C, () lo interpreta <que yo sepa> igual en ambos casos. No te lo tomes como un fallo, sino como una ayuda al hacer funciones de callback, pues te ayuda a evitar andar poniendo (*)
Título: Re: Porque es posible llamar a una función puntero sin usar "*" ?
Publicado por: x64core en 9 Julio 2015, 05:15 AM
Definiendo el tipo es lo mismo que haciendo un casting directo a la hora de usar una variable de algun tipo:


int var;
((void(__stdcall*)(int, int))var)(...);