11.10 Declaring parameters for stack call functions

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

 

      In earlier versions of C--, control of the number and type of

  parameters transferred to a function used to be was the job of the

  programmer. It was a difficult job to coordinate the simultaneous lack of

  control of parameters (for compatibility with previous versions) with

  adding control. Various compromises produced something which differs

  somewhat from traditional C type languages.

 

      In C--, before you can switch on control of stack function parameters,

  a parameter must be declared. But not just any function declaration signals

  the compiler that control of parameters of this function is being switched

  on. Unless the declaration contains something in parentheses, the compiler

  will not keep track of the parameters transferred to this function. In C++

  this sort of declaration indicates that no parameters are passed to the

  function. In C-- this is accomplished in the function declaration by

  writing void in parentheses. For example:

 

  int proc ( void ) ;

 

      On encountering such a function declaration, the compiler will make

  sure that no parameters are passed to this function.

 

      When declaring a function, parameter names may be omitted. In C--

  function parameters of the same time are separated by commas. Changes of

  type are marked by using semicolons. In the declaration, a change of type

  may occur even after a comma:

 

  void ptoc ( int a, b, c; word d );

  void proc ( int, int, int, word );

  void proc ( int, int, int; word );

 

      All these example of declarations are identical and correct.

 

      When checking for functions with a variable number of parameters, C--

  now has a new element of syntax -  an ellipsis. Here is an example of the

  declaration of printf:

 

  void cdecl printf ( word, ... );