C: Ellipsis operator (…) : printf
Posted on March 7, 2008 by John Samuel
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.
沒有留言:
張貼留言