C++开发基础——可变参数与可变参数模板

一,可变参数

1.基础概念

可变参数在C语言和C++语言编程中都有应用。

可变参数的含义是:在函数传参的时候,参数的数量、类型都是可变的,不确定的。

在C语言中,应用到可变参数的是可变参数函数可变参数的宏

在C++语言中,C++11标准提供了两种使用可变参数的方式:

1.如果可变参数的参数类型相同,可以使用标准库中的initializer_list

2.如果可变参数的参数类型不同,可以使用可变参数模板

C语言中,在定义可变参数函数时,使用省略号"..."表示参数是可变的。

简单代码样例如下:

void printf(const char* format, …);

可变参数的使用可以让代码结构更精简。

2.可变参数相关的宏定义

在C语言中,一般需要借助相关的宏定义来实现可变参数,常见的宏定义如下:

va_arg:每一次调用va_arg会获取当前的参数,并自动更新指向下一个可变参数。

va_start:获得可变参数列表的第一个参数,开始使用可变参数列表。

va_end:结束对可变函数列表的遍历,释放va_list。

va_list:存储可变参数列表的具体信息。

    简单介绍就是,va_start用于开始使用可变参数,va_arg用于获得下一个可变参数,va_end用于释放va_list。

    它们都包含在头文件"<stdarg.h>"中

这些宏定义在具体应用时的语法如下:

type va_arg(
   va_list arg_ptr,
   type
);

void va_end(
   va_list arg_ptr
);

void va_start(
   va_list arg_ptr,
   prev_param
);

void va_start(
   arg_ptr
); // (deprecated Pre-ANSI C89 standardization version)

注意,如果自定义参数和可变参数同时在函数中出现,为了不导致编译出错,将可变参数放在形参列表的最后一个位置。

void func(char parm_1, int parm_2, ...);

完整代码样例:

#include <stdio.h>  
#include <stdarg.h>    
void vout(int max, ...)
{
    va_list arg_ptr;
    int args = 0;
    char* days[7];
    va_start(arg_ptr, max);
    while (args < max)
    {
        days[args] = va_arg(arg_ptr, char*);
        printf("Day:  %s  \n", days[args++]);
    }
    va_end(arg_ptr);
}
int main(void)
{
    vout(3, "Sat", "Sun", "Mon");
    printf("\n");
    vout(5, "Mon", "Tues", "Wed", "Thurs", "Fri");
}

运行结果:

Day:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员与背包客_CoderZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值