##args用法

##args的意思,就是把args…中的多个参数,串连起来。
如果写成 #fmt的话,就是把fmt传进来的内容以字符串形式输出。

写法一:

#include <stdio.h>

#define DBG_OUTPUT(fmt,args...) printf("CK File[%s:%s(%d)]:" #fmt "\n", __FILE__,__FUNCTION__, __LINE__, ##args)
int main(int argc,char **argv)
{

    char                j;
    unsigned char        k; 

    j = 0xF1;
    k = 0xF1;

    DBG_OUTPUT(j[%d]k[%d], j, k);
    /* printf("CK File[%s:%s(%d)]:" "j[%d]k[%d]" "\n", __FILE__, __FUNCTION__, __LINE__, j, k) */
    return 0;
}

1.DBG_OUTPUT的宏定义的printf语句中,是#fmt
2.main()函数中的 DBG_OUTPUT的语句中,""双引号,去掉了。
3.对于char j,默认是有符号的。0xF1: 11110001,是个负数,负数表示法是取反加1,因此,还原回去,就是减1,取反,打印出来值是-15.

j[%d]k[%d]作为一个参数传递给了fmt,在printf中使用的是#fmt, 所以 j[%d]k[%d]作为字符串输出,相当于" j[%d]k[%d] "。

写法二:

#include <stdio.h>

#define DBG_OUTPUT(fmt,args...) printf("CK File[%s:%s(%d)]:" fmt "\n", __FILE__,__FUNCTION__, __LINE__, ##args)

int main(int argc,char **argv){

    char                j;
    unsigned char        k; 

    j = 0xF1;
    k = 0xF1;

    DBG_OUTPUT("j[%d]k[%d]", j, k);
    /* printf("CK File[%s:%s(%d)]:" "j[%d]k[%d]" "\n", __FILE__, __FUNCTION__, __LINE__, j, k) */
    return 0;
}

1.宏中是fmt,传递参数是字符串

执行结果都是:
CK File[main.c:main(25)]:j[-15]k[241]
 

转载自:https://blog.csdn.net/u013187074/article/details/78874976

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值