文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>变参函数

变参函数

时间:2010-12-12  来源:CrazyNerd

变参函数允许同一个函数有多种不同的参数组合,编译器不会对可变部分的参数做类型检查。
例子程序中用到的va_list、 va_start、 va_arg、 va_end这几个宏定义在stdarg.h中。

/*
 * 变参函数
 */

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

int add(int n,...)                 /*用三个点做点位符*/
{
    int i = 0;
    int result = 0;
    va_list ap = NULL;
    va_start(ap, n);               /*让ap指向第一个可变参数*/
    for(i=0; i<n; i++)
    {
        result += va_arg(ap,int);  /*让ap指向下一个可变参数*/
    }
    va_end(ap);
    return result;
}

int main(int argc, char* argv[])
{
    printf("%d ",add(1,1));
    printf("%d ",add(2,1,2));
    printf("%d ",add(3,1,2,3));
    return 0;
}


va_list是一个指针,由于参数的类型不定,它可指向任意类型的参数:

#define va_list void*


要让ap指向第一个可变参数,用start的地址加上start的数据类型大小:

#define va_start(ap,start) ap=(va_list)(((char*)&(start)) + sizeof(start))


要让ap指向下一个可变参数,用当前可变参数的地址加上当前可变参数的数据类型大小:

#define va_arg(ap,start) *(type)((char*)ap+sizeof(type))


Finally,va_end does whatever cleanup is necessary.It must be called before the program returns.

#define va_end(ap) ( ap = (va_list)0 )


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载