#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 */
变长参数定义
最新推荐文章于 2019-12-05 16:11:15 发布