码迷,mamicode.com
首页 > 其他好文 > 详细

C 实现可变参数

时间:2017-07-03 22:26:55      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:tchar   利用   start   stdarg.h   var   变量   函数传参   需要   结束   

C中可以借助va_list实现可变参数:

va_start:使用传入的可变参数的第一个变量初始化va_list

va_arg:获取当前可变参数,每次调用时会将指针向后移

va_end:结束

利用这个机制实现可变参数时,需要保证传入的参数可判断结束位置,即第一个参数用于控制结束,同时传入的参数必须得有这个参数作为结束。

C可变参数的实现原理基于函数传参数的的栈,参数从右往左入??,通过第一个参数可以确定参数栈的位置,然后利用数据类型,配合结束符,可以将所有参数取出来。

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

void testchar(const char *var, ...)
{
    va_list args;
    va_start(args, var);
    char *value;
    while(strcmp((value=va_arg(args, char*)), var))
    {
        printf("%s\t", value);
    }
    va_end(args);
    printf("\n");
}

void testint(int count,...)
{
    va_list args;
    va_start(args, count);
    for (int i=0; i<count; i++)
    {
        printf("%d\t", va_arg(args, int));
    }
    printf("\n");
    va_end(args);
}

int main(void)
{
    testchar("eof", "abc", "123", "eof");
    testint(3, 1, 2, 3);
    return 0;
}

注意:va_start和va_end必须同时存在。

C 实现可变参数

标签:tchar   利用   start   stdarg.h   var   变量   函数传参   需要   结束   

原文地址:http://www.cnblogs.com/m2492565210/p/7112981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!