1、使用以下三个函数可实现不定参数
#include<stdarg.h>void va_start(va_list ap, last);type va_arg(va_list, type);void va_end(va_list ap);
《1》、va_start
该函数用来初始化指针变量ap(va_list实际是void类型),之后处理参数就默认从ap开始处理。last一般为传过来的参数列表的第一个参数。
《2》、va_arg
该函数就是将ap指针按照type类型向后移动,然后返回ap所指的那个参数。
注意:
type类型不能是float,其它不支持暂不知(测试过char,int, short均可以)
《3》、va_end
和va_start配套使用,做善后。
#include<stdarg.h>#include <stdio.h>//count 人为将参数个数传递进去int test(int count, short first, ...){va_list argp;int sum = 0;int tmp = 0;va_start(argp, first);printf("%d \t", first);for (int i = 1; i < count; ++i){printf("%d \t", va_arg(argp,short));}va_end(argp);return 0;}int main(){test(10, 5, 6, 8, 9, 10, 56, 89, 52, 21, 110);getchar();return 0;}
2、可变参数宏 …和__VA_ARGS__
C99规范中新增的宏
#define debug(format, ...) fprintf(stdout, format, __VA_ARGS__)int test(int count, short first, ...){va_list argp;int sum = 0;int tmp = 0;va_start(argp, first);printf("%d \t", first);for (int i = 1; i < count; ++i){debug("%d \t", va_arg(argp,short));//printf("%d \t", va_arg(argp,short));}va_end(argp);return 0;}
3、参考
《1》、/linhaostudy/p/6695422.html;
《2》、/alexshi/archive//03/09/2388453.html
8、