C 实现可变参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 实现可变参数相关的知识,希望对你有一定的参考价值。

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 实现可变参数的主要内容,如果未能解决你的问题,请参考以下文章

C 实现可变参数

C语言怎么实现可变参数?

c 中可变参数的实现

C语言奇淫技巧之函数的可变参数

C 编译器如何实现具有可变数量参数的函数?

C语言宏定义实现可变参数