不定参数函数的实现

在软件开发中,有时会遇到无法确定参数的输入个数,和输入类型的时候,这个时候就需要使用不定参数函数的相关概念了。在函数实现的时候,我们需要借助系统设定的几个宏:

va_list:定义A_LIST型的变量,这个变量是指向参数的指针ap;
va_start(ap,v),它的第一个参数是指向可变参数字符串的变量,第二个参数是可变参数函数的第一个参数,通常用于指定可变参数列表中参数的个数。注:这个宏和系统有关。
va_arg(ap,t),它的第一个参数指向可变参数字符串的变量ap,第二个参数是可变参数的类型,type。
va_end(ap) 用于将存放可变参数字符串的变量ap清空(赋值为NULL).

使用这几个宏,请包含头文件,#include <stdarg.h>.注意的是,由于宏只有简单的替换作用,所以在不定参数函数的实现中是需要将数据格式format传入,这样才能正确的使用。实例如下:

#include "stdafx.h"
#include <stdarg.h>

/*
 * brief:将文件输出到指定的文件当中
 * param:
 *     fd:文件描述符
 *     format:不定参数的类型
 *     ...:不定参数
 */
void writefile(FILE *fd,const char *format, ...)
{
	//va_list:创建参数va_list 变量
	va_list ap;
	//va_start;将指针移至不定参数表位置
	va_start(ap, format);
	//使用不定参数表
	vfprintf(fd,format,ap);
	//va_end;释放va_list变量
	va_end(ap);
}
int _tmain(int argc, _TCHAR* argv[])
{
	FILE *fd = NULL;
	fopen_s(&fd, "C:/Users/asus/Desktop/text.txt", "a+");
	//调用不定参数函数
	writefile(fd,"%s%s! ","hello","va_list");
	writefile(fd, "%s(%d) is %s !", "I", 23, "Kobe");
	return 0;
}

输出结果如图所示:
这里写图片描述
对于va_arg()宏的使用,则可以在使用不定参数表的时候,将参数一个一个按照类型拆解出来,直到ap为NULL.

#include <stdarg.h>
#include <stdio.h>

int sum(int, ...);

int main()
{
   printf("15 和 56 的和 = %d\n",  sum(2, 15, 56) );
   return 0;
}

int sum(int num_args, ...)
{
   int val = 0;
   va_list ap;
   int i;

   va_start(ap, num_args);
   for(i = 0; i < num_args; i++) 
   {
      val += va_arg(ap, int);
   }
   va_end(ap);
 
   return val;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值