不定参数函数

2013年6月26日 在http://www.oschina.net/question/813663_115819 发现的这样一句话 "()和(void)是不一样的哦"引起了我的好奇,于是,我便搜索了一下。
发现有人提出相同的疑问
http://ks.cn.yahoo.com/question/15441411.html
其中一句话是:
void set()与void set(void)
在C++中这两种写法没有任何区别。只是,你不加void,如果你的程序要移植到C的话,C会把没有void当作函数接受不定参数

于是,菜鸟就发现了另一个知识点,不定参数函数
就是printf()这种函数,突然发现自己从来没有写过这样的函数
#include <iostream>
using namespace std;

//va_是 variable argument function  的缩写
#define char * va_list
#define _INTSIZEOF(n) ((sizeof(n) + sizeof (int) -1) &~ (sizeof(int) -1))
// 内存对齐,可以将n这个类型长度转换为sizeof(int)的倍数长度。 比如sizeof (n)=9 ,sizeof(int)=4,
// _INTSIZEOF(n) 找回参数占用的字节数,相当于sizeof(n) ,这里只是为了兼容非32位操作系统或其他非windows平台而设置;
#define va_start(ap,v) ( ap = (va_list) &v + _INTSIZEOF(v))
// 找回参数的起始位置
#define va_arg(ap,t) (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))
// 找到下一个参数
#define va_end(ap) (ap = (va_list)0 )
// 结束,一般可以不执行这句

#define endFlag -1
// 自定义结束标示符

int aver1 (int first,...);

void main()
{
 cout<<aver1(1,2,3,4,5,endFlag)<<endl;
}

int aver1 (int first,...)
{
 int count = 0, sum = 0;
 int var = first;
 va_list list;
 va_start(list,first);
 while (var != endFlag )
 {
  sum+= var;
  count ++;
  var = va_arg( list, int );
 }
 va_end(list);
 return (sum? (sum/count):0);
}

-----------------------------------------------------
简单的知道怎么用就好了,搜索“不定参数”可以获得更多的信息

------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值