Just for the record, the bit zero marking the end of the parameter list
conflicts with the C (and ALGOL) call-by-value mechanism, where (integer) values
are part of the register 1 parameter list (which is not an "address" list, in
this case), and the passed values may be negative. We had lots of trouble with
that.
This is a good example. where a good idea at first sight (marking the end of the
address list with bit zero set) shows up bad in the long term.
There still has a way to be found to specify the length of a variable long
parameter list in a portable way across all platforms - even in C you have only
the stdarg.h header. The number of arguments somehow has to be passed in the
first n "fix" parameters, but it is left to the individual function to specify
how this is done.
Kind regards
Bernd
Am Freitag, 13. August 2010 15:25 schrieben Sie:
> Yes, the unfortunate overloading of bit zero. Does bit zero on in a
> parameter list mean a 31-bit address or the last parameter in variable
> length parameter list. A real problem when you don't know how old the
> legacy code is that's calling your routines.
>
> G.W.
>
|