C语言学习的补充

1.宏返回值的使用

注意:在如果有多条语句的话需要使用do{}while(0)语句,或者({})包括起来。虽然这两个语法
都可以使用宏来进行定义,但是do{}while(0)是没有返回值的

宏返回值的使用:({})可以写多条语句,并且最后一句话的结果就是宏的返回值,具体用法如下

    #include <stdio.h>
    #define MAX(a,b)  ({int max;if(a>b)max=a;else max=b;max;})
    int main(int argc,const char *argv)
    {

        int num=MAX(100,200);
        printf("最大值:%d\n",num);
        return 0;
    }

2.可变参数的使用

解释:
    在linux内核中可以使用man手册查看 va_start后会出现一下的几个函数

头文件:
    #include <stdarg.h>
函数原型:
       void va_start(va_list ap, last);
       type va_arg(va_list ap, type);
       void va_end(va_list ap);
功能:
       va_start(va_list ap, last);//使用last初始化ap,初始化完成后ap里面存的就是last的地址,在函数的内部就确定了栈的类型

       va_arg(va_list ap, type);//如果是满减栈那么ap就向下减一个type类型的字节,然后取值

       va_end(va_list ap);//在使用完ap后需要进行销毁,因为内部实现的时候涉及到了空间分配
例子:

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

    int add(int n,...)
    {
        int sum=0;
        va_list ap;//定义一个变量ap
        va_start(ap,n);//对ap进行初始化
        int i;
        for(i=0;i<n;i++)
        {
            sum+=va_arg(ap,int);
        }
        va_end(ap);
        return sum;
    }
    int main(int argc,const char *argv[])
    {
        printf("%d\n",add(3,1,2,3));
        return 0;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值