C语言可变参数

发布时间 2023-03-23 10:28:15作者: 虎啸岳林

C语言中,可变参数是指函数的参数个数不确定,可以根据试剂情况传递不同个数的参数。可变参数的函数必须至少要有一个确定的参数,这个确定的参数是可变参数的前一个参数,通常是一个整形。C语言中,可变参数的实现是通过stdarg.h头文件中的宏和函数来实现的。常用的宏有va_list、va_start、va_arg和va_end。其中,va_list是一个指向参数列表的指针,va_start用于初始化参数列表指针,va_arg用于获取参数列表中的参数,va_end用于结束参数获取。

#define PRINT_DEBUG(fmt,args...) do{if(a>b){printf(fmt,##args);}}while(0)

args是可变参数的意思

例如

 

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

double average(int num, ...)
{
    va_list valist;
    double sum = 0.0;
    int i;

    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
        sum += va_arg(valist, int);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

    return sum / num;
}

int main()
{
    printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5));
    printf("Average of 5, 10, 15 = %f\n", average(3, 5, 10, 15));
}