实现环境:Fedora12 + gcc
任务:用C语言实现一个参数可变的函数,以方便输出。
源代码如下:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
int sum(int data, ...)
{
int i = data, s = 0;
va_list vl;
va_start(vl, data);
while(i != -1)
{
s += i;
i = va_arg(vl, int);
}
va_end(vl);
return s;
}
char smessage[1024] = {0};
int display(const char *fmt, ...)
{
va_list args;
int n;
va_start(args, fmt);
n = vsprintf(smessage, fmt, args);
va_end(args);
return n;
}
int main()
{
int s = sum(1, 3, 4, 5, -1);
printf("sum = %d\n", s);
int ret = display("Here: %s, %d, %.2f, %s", "hello", 45, 33.6535896, "How do you do");
printf("ret = %s(%d)\n", smessage, ret);
return 0;
}
输出如下:
sum = 13
ret = Here: hello, 45, 33.65, How do you do(37)
关键点还是调用了vsprintf,另外就是要了解va_start(), va_end()以及va_list的使用!