PDA

Ver la Versión Completa : Para que sirve el FastCall en C++ builder


Gelmin
14-01-2007, 00:45:55
Hola amigos, bueno estoy entrandole al c++ builder antes he hecho algunas cositas en Delphi y visual basic... pero mi primera inquietud es la siguiente:
Me gustaria saber cual es el objetivo de la palabra esa que dice __fastcall que coloca el builder al principio de las funciones... para que sirve, que pasa si no la pongo o si se la quito, quiero saber porque debe ir el fastcall ese ahi. Salu2 muchos Gel (Nicaragua).:confused:

oracle
14-01-2007, 04:39:04
Originalmente posteado por Gelmin...
Me gustaria saber cual es el objetivo de la palabra esa que dice __fastcall que coloca el builder al principio de las funciones...

Bueno Gelmin creo haber leido en alguna parte que se refiere a los tipos de convenciones que utiliza el compilador para el llamado a funciones ( hay otras como __stdcall que debes haber visto). Creo que son importantes cuando trabajamos con mas de un lenguaje o con mas de un compilador a la vez y queremos llamar funciones de uno y otro indistintamente. C++ Builder por defecto asume la convencion __fastcall para sus funciones....pero en fin seguramente algunos de nuestros amigos del foro sabran darnos una detallada explicacion del tema....

Saludos

darknesrul
14-01-2007, 04:40:20
Con un simple F1 desde el builder te encontras con esto:


Description Use the __fastcall modifier to declare functions that expect parameters to be passed in registers. The first three parameters are passed (from left to right) in EAX, EDX, and ECX, if they fit in the register. The registers are not used if the parameter is a floating-point or struct type. All form class member functions must use the __fastcall convention. The compiler treats this calling convention as a new language specifier, along the lines of _cdecl and _pascal Functions declared using _cdecl or _pascal cannot have the _fastcall modifier because they use the stack to pass parameters. Likewise, the __fastcall modifier cannot be used together with _export. The compiler prefixes the __fastcall function name with an at-sign ("@"). This prefix applies to both unmangled C function names and to mangled C++ function names. For Microsoft C++ style __fastcall implementation, see __msfastcall and __msreturn.
Es decir, esto hace que los primeros tres parametros de las funciones definidas con este modificador, se almacenen en registros (EAX, EDX y ECX) en lugar de la pila. El acceso a registro es mucho mas rapido (supongo que de ahi el "fast"). Si los parametros no se pueden guardar en los registros (por ser estructuras o numeros de coma flotante) se usa la pila. En cuanto a si se puede quitar este modificador que incluye el Builder por defecto la respuesta es NO. Todas las funciones miembro de una clase Form deben usar este modificador. Esta todo en la ayuda del borland....

Gelmin
14-01-2007, 16:43:08
Gracias compañeros, si claro buscare + info en la ayuda lo q pasa es q no tenia el builder a mano cuando hice la pregunta y tenia esa duda... seguimos en contacto (Gel):D