Porque es posible llamar a una función puntero sin usar "*" ?

Iniciado por patilanz, 8 Julio 2015, 15:06 PM

0 Miembros y 1 Visitante están viendo este tema.

patilanz

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

BloodSharp

#1
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#



ivancea96

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 (*)

x64core

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)(...);