简介
VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活.
va_list使用方法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
void pInt(int a){
printf("%d", a);
}
void pFoat(double a){
printf("%f", a);
}
/* 取最大值 */
int get_max(int n_values,...){
va_list var_arg;
int count = 0;
int max = 0;
va_start(var_arg, n_values);
int i = 0;
for(i = 0; i<n_values; i++){
int cur = va_arg(var_arg, int);
if(cur > max)
max = cur;
}
va_end(var_arg);
return max;
}
void listPrint(int n, ...){
va_list args;
int i = 0;
va_start(args, n);
for(; i < n; i++){
printf("%d ", va_arg(args, int));
}
va_end(args);
return;
}
void printFmt(const char* fmt, ...){
va_list var_arg;
va_start(var_arg, fmt);
const char *p = NULL;
const char *q = NULL;
const char *temp = NULL;
for(p = fmt; p < &fmt[strlen(fmt)]; p++){
if(*p == '%')
{
switch(*++p)
{
case 'c':
putchar(va_arg(var_arg, char));
break;
case 's':
for(temp = va_arg(var_arg, char *), q = temp; q < temp + strlen(temp); q++){
putchar(*q);
}
break;
case 'd':
pInt(va_arg(var_arg, int));
break;
case 'f':
pFoat(va_arg(var_arg, double));
break;
}
}
if(*p == ' ') putchar(' ');
}
va_end(var_arg);
}
int main(int argc, char *argv[]){
int nums = 3, b = 3, c = 5, d = -1;
int res = get_max(nums, b, c, d);
printf("%d\n", res);
return 0;
}