#include<stdio.h> #include<stdarg.h> //该头文件包含va_start,va_list,va_end宏 int add(int a,int b,...) { va_list p_arg; //定义一个va_list变量,实际是一个指针,用于定位可变行参变量 int va; va_start(p_arg,b);//执行本宏后,p_arg指向第一个可变信参,b为最后一个确定行参 int sum=a; va=b; while(va!=0) //可变行参以零作为结束标志,虽然作为本函数的行参结束标志不是很合适,主要用于说明原理,呵呵 { sum+=va; va=va_arg(p_arg,int); //获取下一个可变行参值,类型为int } va_end(p_arg); //将p_arg置为NULL,养成这个好习惯 return sum; } int main(int argc,char **argv) { int sum=add(1,2,3,4,5,6,7,8,9,10,0); printf("sum of 1 to 10 is %d/n",sum); // 输出 sum of 1 to 10 is 55 return 0; }