Foro de elhacker.net

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
  1. typedef bool (_funct)(char* buffer,int maxLength);
  2. _funct * funct = (_funct*)GetProcAddress(library, "funct");
  3. //Porque es posible llamar a un puntero funcion de esta manera? :
  4. funct(..);
  5. //Me parece mas logico asi:
  6. (*funct)(..);
  7.  

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
Hola,
teniendo esto:
Código
  1. typedef bool (_funct)(char* buffer,int maxLength);
  2. _funct * funct = (_funct*)GetProcAddress(library, "funct");
  3. //Porque es posible llamar a un puntero funcion de esta manera? :
  4. funct(..);
  5. //Me parece mas logico asi:
  6. (*funct)(..);
  7.  

Saludos

Teniendo en cuenta que funct es un puntero, el compilador comprende que en assembler seria algo equivalente a lo siguiente:
Código
  1. push "funct";
  2. push library;
  3. call GetProcAdress;
  4. mov funct,eax;
  5. push maxLength;
  6. push buffer;
  7. call [funct];
  8. 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:

Código:
int var;
((void(__stdcall*)(int, int))var)(...);