C: Ellipsis operator (…) : printf « Programming in Linux
Posted on March 7, 2008 by John Samuel
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.