11.1 Types of functions and macros

  -----------------------------------

 

      C-- now supports 4 ways of calling a function:  cdecl, pascal, stdcall

  and fastcall. The features of these are summarized below.

 

  cdecl  This type of function call is the default for C. The function

  -----  parameters are transferred in inverse order to how they are found in

  the source text. The stack is cleared of the parameters after completing

  the function. This is a very suitable method for functions with a variable

  number of parameters.

 

  pascal  In this type of call, parameters are transferred in the same order

  ------  in which they were recorded. The stack is cleared of the parameters

  by the function itself. This method is more compact than cdecl but can only

  be used with a constant number of parameters.

 

  stdcall  This is a cross between the first two types. The parameters are

  -------  transferred in the inverse order to how they are found in the

  stack, and the stack is cleared of the parameters by the function.

 

  fastcall  In this type of function call, parameters are transferred via

  --------  registers, so there is no need to clear the stack of parameters.

  There are limits on the number of parameters which can be transferred. This

  limit is three for C, but six for C--. In C-- parameters are by default

  transferred in teh order: 1 - AX/EAX, 2 - BX/EBX, 3 - CX/ECX, 4- DX/EDC, 5

  - DI/EDI, 6 - SI/ESI. Only four parameters of types char or byte can be

  transferred, and only to the first four registers: 1 - AL, 2 - BL, 3 - CL,

  4 - DL. The order of registers can be changed if it is clearly indicated

  either while declaring functions or when defining them. Fastcall functions

  are also sometimes called register functions.

 

      By default, in C-- if a function name is written upper-case, it is

  considered to be a fastcall function. If, however, there is at least one

  lower-case letter in the name, it is of call type pascal, except for

  programs compilable with the keys /w32, /w32c, or /DLL, for which the

  default is stdcall. The default can be changed to any other type, by

  declaring this function with the type of call wanted.

 

      Functions are declared to instruct the compiler on how to return from a

  function, how to transfer parameters to a function, and the number of

  functions.