变长参数定义

来源:互联网 发布:ubuntu 17.10 下载 编辑:程序博客网 时间:2024/05/22 02:00
#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 */

0 0
原创粉丝点击