本文部分原创,部分改编
可变参数函数改编自:网友kevintz的“C语言中可变参数的用法”一文
#include<stdio.h>
//引入可变参数函数头文件
#include<stdarg.h>
//C语言中另一种函数声明方式
print(uint,buf,len)
int uint;
int buf;
int len;
{
printf("Function Declaration another Way Result1 of Running: %d %d %d\r\n",uint,buf,len);
return 0;
}
/******可变参数函数*******/
void simple_va_fun(int start,...){
va_list arg_ptr;
int nArgValue=start;
int nArgCount; //可变数目
va_start(arg_ptr,start);//以固定参数的地址为起点确定变参的内存起始地址
do{
++nArgCount;
printf("the %d th arg:%d\r\n",nArgCount,nArgValue);//输出各参数的值
nArgValue = va_arg(arg_ptr,int); //va_arg返回可变参数的具体取值
}while(nArgValue!=-1); //-1为结束判定标志
}
/** 宏定义包含在stdarg.h中
* type va_arg(va_list art_ptr, type);
* void va_end(va_list arg_ptr);
* void va_start(va_list arg_ptr, pre_param);
* va_list;
*
* 1.首先定义一个va_list类型的变量,该变量是指向参数地址的指针
* 得到参数地址后结合参数类型,才能得到参数的值,此处为arg_ptr
* 2.然后用va_start宏初始化定义va_list的变量,第二个参数是可变
* 参数列表的前一个参数,也就是最后一个固定参数
* 3.然后依次用va_arg宏使arg_ptr返回可变参数的地址,结合参数类型
* 可以得到参数的值
* 4.设定技术条件,此处条件为判断参数值是否为-1
*
* 在va_start宏中,参数不能声明为寄存器变量或者函数或者数组类型
*
*/
int main(){
//调用函数
print(1,2,3);
//调用函数并使用其返回值
printf("Function Declaration another Way Result2 of Running : %d\r\n",print(1,2,3));
/******可变参数函数*******/
simple_va_fun(100,200,300,-1);
simple_va_fun(20,-1);
return 0;
}