变长参数定义

#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 */

你可能感兴趣的:(#程序设计类)