变长参数定义

#include <stdarg.h>

#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)  这个用的时候必须要带参数  C99 
# define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args) 

海盗船长() 09:24:23
#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)  这个用的时候必须要带参数,不然报错。。
#define LOGSTRINGS(fm, ...) printf(fm,##__VA_ARGS__)  这样就不带参数也可以了

海盗船长() 09:52:20
而且
#define LOGSTRINGS(fm, ...) printf(fm,##__VA_ARGS__) 。。vs2005都可以编译通过
# define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)。。vs2005编译不过

今天QQ群里有人问到变长参数的问题,记到语法,第一想到就是LDD里面的代码示例,第四章内核调试示例里面,__VA_ARGS__ 是C99里面的,现在的GCC都支持,在ADS 1.2,  还有C++Builder 6下面编译失败,为了方便以后查找,存BLOG里


以下来自LDD
#undef PDEBUG /* undef it, just in case */ 
#ifdef SCULL_DEBUG # ifdef __KERNEL__ /* This one if debugging is on, and kernel space */
# define PDEBUG(fmt, args...) printk( KERN_DEBUG "scull: " fmt, ## args) 
# else 
/* This one for user space */ 
# define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args) 
# endif 

#else

# define PDEBUG(fmt, args...) /* not debugging: nothing */ 
#endif 
#undef PDEBUGG
#define PDEBUGG(fmt, args...) /* nothing: it's a placeholder */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值