stdarg的使用

// 可变参头文件 <stdarg.h>
// 主要依赖五个宏: va_list,va_start, va_arg, va_end, va_copy
// 其中 va_copy 是 c99 新引进的

//     va_list
//         本质为char*指针,指向可变参的列表,用于声明变量
//         eg. va_list ap;
//     va_start
//         获取可变参数列表的第一个参数的地址, para为可变参数最左边的参数,即...之前的最后一个参数
//         eg. va_start(ap, para)
//     va_arg
//         获取可变参数的当前参数并将指针指向下一参数, type为当前参数的类型
//         eg. va_arg(ap, type)
//     va_end
//         与清空va_list的参数列表,与va_start配合使用
//         eg. va_end(ap)
//     va_copy
//         复制 va_list 的变量
//         eg. va_copy(des, src)
    
#include <stdio.h>
#include <stdarg.h>

void printint(int arg, ...)
{
    int t;
    va_list ap;
    va_start(ap, arg);
    
    for(;;)
    {
        t = va_arg(ap, int);
        if(t == 0)
            break;
        printf("%d ", t);
    }
    
    printf("\n");
    va_end(ap);
}

int main()
{
    printint(1,2,3,4,5,0);
    printint(34,12,0);
    return 0;
}
    
// output:

//     2 3 4 5
//     12

猜你喜欢

转载自www.cnblogs.com/tongyishu/p/11690899.html