#define log(x) #a
将宏参数转化为字符串
prinf(log(111))
==>结果为111
#define temp(x) temp_##a
将##前后的标记进行合并
int temp(1);
==>这个变量的名字为temp_1
宏定义的串口的DEBUG的使用
C99模式
C99模式--方法一:
#ifdef DEBUG_ON
#define DEBUG(fmt,args...) printf("%s==>%s(%d) : "#fmt"\r\n",__TIME__,__FILE__,(uint)__LINE__,##args...)
#else
#define DEBUG(fmt,args...)
#endif
C99模式--方法二:
#ifdef DEBUG_ON
#define DEBUG(fmt,...) printf("%s==>%s(%d) : "#fmt"\r\n",__TIME__,__FILE__,(uint)__LINE__,__VA_ARGS__)
#else
#define DEBUG(fmt,...)
#endif
C89模式(不支持可变长宏)
#ifdef DEBUG_ON
#define DEBUG(fmt,args) printf("%s==>%s(%u) : "#fmt"\r\n",__TIME__,__FILE__,(uint)__LINE__,args)
#else
#define DEBUG(fmt,args)
#endif
宏的展开问题
#define x(a,b) a##b;
#define y(c) #c
此时调用y(x(1,2))不会进行展开而输出"x(1,2)"
如果要进行展开操作,可以使用
#define x(a,b) a##b;
#define y(c) #c
#define temp(c) y(c)//内部没有参数而不会被阻止
此时调用temp(x(1,2))会进行展开而输出"12"