#include<stdio.h>
#include <stdarg.h>
/* The sum() function can accept variable number of arguments.
In the function declaration ... means that the number and
type of the arguments may vary. The marker ... can only
appear at the end.
*/
int sum(int num_of_arguments, ... )
{
/* A list to store the aruements. In example, this may contain
1,2,3 and 4 elements on successive calls from main()
*/
va_list args;
int sum= 0, i;
/* Directing the va_list args initialized above to start storing
all parameters folloowing the first parameter 'num_of_arguments'
*/
va_start (args, num_of_arguments );
va_list args_copy; //initialize a copy of va_list to be used
va_copy(args_copy, args); //copy args to args_copy
for (i= 0; i< num_of_arguments; i++ )
/* We add 5 to each element in variable argument list and
print it.
*/
printf("%d ", va_arg (args_copy, int) + 5);
va_end(args_copy); //destruct args_copy
printf("\n");
/**** Next, we use args as in previous post ****/
/* Loop until all parameters are seen. */
for (i= 0; i< num_of_arguments; i++ )
/* Extract the next value in argument list and add it to sum. */
sum += va_arg (args,int);
/* Signal that we are done with our usage of the list */
va_end (args);
return sum; /* Returns the calculated sum.*/
}
int main()
{
int result;
result=sum (4,1,2,3,4);
printf("result of sum() with 5 arguement: %d \n", result);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi8qIFRoZSBzdW0oKSBmdW5jdGlvbiBjYW4gYWNjZXB0IHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuCiAgIEluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiAuLi4gbWVhbnMgdGhhdCB0aGUgbnVtYmVyIGFuZAogICB0eXBlIG9mIHRoZSBhcmd1bWVudHMgbWF5IHZhcnkuIFRoZSBtYXJrZXIgLi4uIGNhbiBvbmx5CiAgIGFwcGVhciBhdCB0aGUgZW5kLgoqLwppbnQgc3VtKGludCBudW1fb2ZfYXJndW1lbnRzLCAuLi4gKQp7CiAgLyogQSBsaXN0IHRvIHN0b3JlIHRoZSBhcnVlbWVudHMuIEluIGV4YW1wbGUsIHRoaXMgbWF5IGNvbnRhaW4KICAgIDEsMiwzIGFuZCA0IGVsZW1lbnRzIG9uIHN1Y2Nlc3NpdmUgY2FsbHMgZnJvbSBtYWluKCkKICAqLwogIHZhX2xpc3QgYXJnczsKICBpbnQgc3VtPSAwLCBpOwogCiAgLyogRGlyZWN0aW5nIHRoZSB2YV9saXN0IGFyZ3MgaW5pdGlhbGl6ZWQgYWJvdmUgdG8gc3RhcnQgc3RvcmluZwogICAgIGFsbCBwYXJhbWV0ZXJzIGZvbGxvb3dpbmcgdGhlIGZpcnN0IHBhcmFtZXRlciAnbnVtX29mX2FyZ3VtZW50cycKICAqLwogIHZhX3N0YXJ0IChhcmdzLCBudW1fb2ZfYXJndW1lbnRzICk7CiAgCiAgdmFfbGlzdCBhcmdzX2NvcHk7IC8vaW5pdGlhbGl6ZSBhIGNvcHkgb2YgdmFfbGlzdCB0byBiZSB1c2VkCiAgdmFfY29weShhcmdzX2NvcHksIGFyZ3MpOyAvL2NvcHkgYXJncyB0byBhcmdzX2NvcHkKICAKICBmb3IgKGk9IDA7IGk8IG51bV9vZl9hcmd1bWVudHM7IGkrKyApCiAgICAgLyogV2UgYWRkIDUgdG8gZWFjaCBlbGVtZW50IGluIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QgYW5kCiAgICAgICAgcHJpbnQgaXQuCiAgICAgKi8KICAgICBwcmludGYoIiVkICAiLCB2YV9hcmcgKGFyZ3NfY29weSwgaW50KSArIDUpOyAKICAgICAKICB2YV9lbmQoYXJnc19jb3B5KTsgLy9kZXN0cnVjdCBhcmdzX2NvcHkKICAKICBwcmludGYoIlxuIik7CiAgCiAgLyoqKiogTmV4dCwgd2UgdXNlIGFyZ3MgYXMgaW4gcHJldmlvdXMgcG9zdCAqKioqLwogICAgCiAgLyogTG9vcCB1bnRpbCBhbGwgcGFyYW1ldGVycyBhcmUgc2Vlbi4gKi8KICBmb3IgKGk9IDA7IGk8IG51bV9vZl9hcmd1bWVudHM7IGkrKyApCiAgICAvKiBFeHRyYWN0IHRoZSBuZXh0IHZhbHVlIGluIGFyZ3VtZW50IGxpc3QgYW5kIGFkZCBpdCB0byBzdW0uICovCiAgICBzdW0gKz0gdmFfYXJnIChhcmdzLGludCk7CiAKICAvKiBTaWduYWwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIG91ciB1c2FnZSBvZiB0aGUgbGlzdCAqLwogIHZhX2VuZCAoYXJncyk7CiAKICByZXR1cm4gc3VtOyAgLyogUmV0dXJucyB0aGUgY2FsY3VsYXRlZCBzdW0uKi8KfQppbnQgbWFpbigpCnsKICBpbnQgcmVzdWx0OwogCiAgcmVzdWx0PXN1bSAoNCwxLDIsMyw0KTsKICBwcmludGYoInJlc3VsdCBvZiBzdW0oKSB3aXRoIDUgYXJndWVtZW50OiAlZCBcbiIsIHJlc3VsdCk7CiAKICByZXR1cm4gMDsKfQ==