variable # of args portability?

Michael Meissner meissner at dg_rtp.UUCP
Wed Jul 9 23:46:55 AEST 1986


In article <809 at ucbcad.BERKELEY.EDU> faustus at ucbcad.UUCP writes:
>
> I want to be able to write a function that will take an unknown number
> of arguments and then call another such function with these arguments,
> namely something like printf() that calls _doprnt() without processing
> its arguments at all.  I know there is no way to write this code portably,
> but is it reasonable to assume that I will be able to do it at all in
> most common implementations of C?  Also, how safe is it to assume that there
> will be something like _doprnt() available?  I know it's not good to depend on
> things like this, but I don't want to have to write my own printf()...
> 
> 	Wayne

    In the forthcoming ANSI X3J11 standard, as well as System V, are the
functions vprintf, vfprintf, and vsprintf.  Instead of taking the argument
list directly, the take the varargs pointer.  Thus the calling sequence looks
like (in the ANSI declarative style):

	int vprintf( const char *fmt, va_list varargs_ptr );
	int vfprintf( FILE *stream, const char *fmt, va_list varargs_ptr );
	int vsprintf( char *buffer, const char *fmt, va_list varargs_ptr );

    For systems that do not have vprintf and friends yet, you could write
the vprintf, et. al, in a few lines of code calling _doprnt.  This would
have to be tailored for each system.

	Michael Meissner, Data General
	...{ decvax, ucbvax, ihnp4 }!mcnc!rti-sel!dg_rtp!meissner



More information about the Comp.lang.c mailing list