C - 可变参函数与可变参宏

一、可变宏

1.#

可以接收一个参数,并把这个参数按照原来的字符串源码原样传给宏内部;

1 #define RR(x) printf(#x"\n");
2 int main(){
3     int a = 1;
4     RR(1);
5     RR(a);
6     return 0;
7 }

输出:

1
a

解释:#x  相当于x所代表的字符串;

2.##

 可以接收多个参数,并且将多个参数原样替换,输入什么就替换成什么;

1 #define RR(fmt,args...) printf(fmt"\n",##args);
2 int main(){
3     int a = 1;
4     int b = 2;
5     RR("test--%d|%d",a,b);
6     return 0;
7 }

输出:

test--1|2

 二、可变函数

参考菜鸟教程【https://www.runoob.com/

#include <stdio.h>
#include <stdarg.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));
}

输出:

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

 

posted @ 2019-12-04 19:43  chiwin  阅读(257)  评论(0编辑  收藏  举报