Page 1 of 1

c++ printf(char *str, arg 1, arg 2...etc)

Posted: Tue May 13, 2003 2:48 pm
by slacker
how would i write a printf function that takes an unlmited number of arguments like the printf function

printf(str, %c,%i)

also i dont want to use any standard functions like stdarg.h

Re:c++ printf(char *str, arg 1, arg 2...etc)

Posted: Tue May 13, 2003 5:33 pm
by Tim
slacker wrote: how would i write a printf function that takes an unlmited number of arguments like the printf function

printf(str, %c,%i)

Code: Select all

int printf(const char *format, ...);
also i dont want to use any standard functions like stdarg.h
You've got to use stdarg.h, or at least copy the code out of it. stdarg.h defines the methods of accessing a variable number of parameters for your particular platform. stdarg.h will work on your processor regardless of the OS.

Re:c++ printf(char *str, arg 1, arg 2...etc)

Posted: Sat Jun 14, 2003 9:50 am
by LOneWoolF
Hey slacker

have a look at stdarg

an easy way is:

(if you use GCC)

Code: Select all

#define va_list         __builtin_va_list
#define va_start(v, l)  __builtin_stdarg_start((v), l)
#define va_end          __builtin_va_end
#define va_arg          __builtin_va_arg
#define va_copy(d,s)    __builtin_va_copy((d), (s))

and in the function

Code: Select all

va_list ap;
 va_start(ap, fmt);
(loop through that arguments...)
example:
 char *s = va_arg(ap, char *); //if iz a character *
 int i = va_arg(ap, int); // if iz an int
(...)
 va_end(ap);your function:
the second argument of va_start identifies the last argument before the ... of the function (i think)

go and get a look on the printf function and the vsprintf function of the first public linux kernel available on
osdev.neopages.net (download section)

GreeZ
LOneWoolF