Friday, 15 February 2013

varargs - C - passing variable arguments -



varargs - C - passing variable arguments -

i'm writing implementation of printf. want can pass many strings within strings, e.g.:

kprintf("hello %s", "goodbye %s", "farewell\n");

don't inquire why, may insane. anyway, recursively calls after looking how many % characters in string passing; if more 1 % in it, should pass many arguments. however, i've been unable accomplish elegance, see below one:

case 1: kprintf(str, argus[0]); break; case 2: kprintf(str, argus[0], argus[1]); break; case 3: kprintf(str, argus[0], argus[1], argus[2]); break; case 4: kprintf(str, argus[0], argus[1], argus[2], argus[3]); break; case 5: kprintf(str, argus[0], argus[1], argus[2], argus[3], argus[4]); break;

with argus array of pointers. works, hate it. there way pass variable arguments function ?

there type work. called "va_list" , can feed arguments (4096 @ most, guess). in order utilize it, include starg.h-header , you'll need utilize ellipses ... in function declaration.

int kprintf(int count, ...){ va_list vl; va_start(vl,count); (i=0;i<n;i++) { val=va_arg(vl,double); printf (" [%.2f]",val); } va_end(vl); }

see here example.

c varargs

No comments:

Post a Comment