2009年12月29日 星期二

C: Ellipsis operator (…) : printf « Programming in Linux

C: Ellipsis operator (…) : printf « Programming in Linux

C: Ellipsis operator (…) : printf

For more updates, check Programming Insights.
Ever imagined how printf works, even though we are able to pass a number of arguments to it. If we design a function which takes two arguments and pass three parameters, we are bound to get this error “too many arguments to function”i.e., suppose we have a function
int fun2(int a, int b)
and we call the function
fun2(2,3,4)
we are sure to get the above error. So the question is how printf / scanf works with variable number of arguments? This is because C has a feature called ellipsis (…) by which you are able to pass variable number of arguments?
So the prototype of printf is
int printf(const char *str,...)
But the next question is how then can we access the arguments in the function. This can be done by the power of pointers. Let’s take a pointer which points to the last argument before …
and depending on the next arguments of what we expect, we increment the pointer and increment it accordingly
Below is a simple code which shows how this can be done
int print(const char *str,...)

/*str has the number of integers passed*/

{

int i;

int num_count=atoi(str);

 int *num=(int *)&str;

for(i=1;i<=num_count;i++)

                printf("%d ",*(num+i));}

int print_num(int num_count,...)

/*num_count contains the number of integers passed*/

{

int i;

int *num=&num_count;

for(i=1;i<=num_count;i++)

printf("%d ",*(num+i));

}

int main()

{

print_num(3,2,3,4);

print("3",2,3,4);

}

For more updates, check Programming Insights.

沒有留言: