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.
Advertisement

3 Responses

  1. [...] Variable Argument List Access Posted in C by John on March 7th, 2008 Here, I explained how we can utilize the operator ellipsis (…) to pass variable number of [...]

  2. [...] Here, I explained how we can utilize the operator ellipsis (…) to pass variable number of arguments to a function. I have utilised there the concept of pointers to access the variable arguments. The standard C Library provides support to access these arguments. Use for this support All you need is to know the last argument before the ellipsis operator(At least one argument is must to use variable arguments), let’s call it larg [...]

  3. That’s not a safe way to use the ellipsis operator, as it makes assumptions about padding and about the way arguments are passed that are not part of the C spec.

    The correct way is to use the various methods exposed by stdarg, va_start, va_arg and va_end.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.