首页 > C语言怎么实现函数不定参数

C语言怎么实现函数不定参数

像printf一样,传递的参数个数可以是任意的
比如我想实现一个累加函数 int add()
当调用add(3,5)返回8,调用add(1,2,3)返回6这样的。
想了一会儿感觉没有思路,谢谢啦


http://www.360doc.com/content/14/0911/20/15257968_408755387.shtml


我以前写的:Function Pointer Stack in C

/*
 * 传入一系列处理函数来处理 data
**/

// 定义
void todos(int *data, ...)
{
    va_list ap;
    va_start (ap, data);
    void (*f)() = va_arg (ap, void (*)());
    do {
        (*f)(data);
    } while (NULL != (f = va_arg(ap, void (*)())));
    va_end (ap);
    return;
}

// 调用,add3, add5, 是函数,接受一个参数
todos(&d, add3, add5, add3, NULL);

具体到我那个链接可以看到。


C的标准库里有。想探究原理可以再详细研究

include <stdarg.h>

int add(int num,...) {
    va_list valist; //用于放参数
    int sum = 0;
    int i;

    /* 以num个参数初始化valist */
    va_start(valist, num);

    /* 把参数放进valist */
    for (i = 0; i < num; i++)
    {
       sum += va_arg(valist, int);
    }
    /* 清理内存 */
    va_end(valist);

    return sum;
}

C - Variable Arguments
C语言中可变参数实现原理


可变参

/usr/include/stdarg.h

【热门文章】
【热门文章】