c_cpp函数可变参数的实现

⌚Time: 2023-08-04 15:02:30

👨‍💻Author: Jack Ge

c语言,利用<stdarg.h> 里面的


typedef char* va_list;

void va_start ( va_list ap, prev_param ); /* ANSI version */

type va_arg ( va_list ap, type );

void va_end ( va_list ap );

#include <stdio.h>

#include <stdarg.h>

double Sum(int count, ...)// 必须有一个普通参数,“...”必须放在最右边

 

{

 

    va_list valist;// 创建一个va_list类型的变量

 

    double sum = 0;

 

    va_start(valist, count);// 让可变参数列表知道第一个参数的位置,方便寻址后续的变参,一定要“...”之前的那个参数

    int i = 0;

    for (i = 0; i < count; i++)

 

    {

 

        sum += va_arg(valist, double);  //告诉 valist 后面的变参分别是什么类型的

 

    }

 

    va_end(valist);                   // 释放valist

 

    return sum;

 

}

int main(){

    

    double x = Sum(2,5.6,34.6);//第一个参数count表示传入了多少可变参数

    printf("%lf",x);

    return 0;

}

c++,利用initializer_list


#include <initializer_list>

#include <string>

#include <iostream>

 

using namespace std;

 

void Log(initializer_list<string> list)

{

    for (auto it = list.begin(); it != list.end(); ++it)

    {

        cout << *it << " ";

    }

}

 

int main()

{

    Log({ "Hello", "World", "C++" });

 

    return 0;

}