宏控制输出开关
此处DEBUG_ON 后的1为开启打印 改为0则关闭输出
/* 输出打印开关 */
#define DEBUG_ON 1
#if DEBUG_ON
#define DEBUG(...) printf(__VA_ARGS__)
#else
#define DEBUG(...)
#endif
VA_ARGS,fmt是什么
还有一种写法是
#define DEBUG(fmt, ...) printf(fmt, ##__VA_ARGS__)
__VA_ARGS__
是 C/C++ 中的一个特殊宏,用于表示可变参数列表。在宏定义中,如果需要传递可变数量的参数,可以使用 __VA_ARGS__
来表示这些参数。
在这个宏定义中,fmt
表示输出格式字符串,__VA_ARGS__
表示可变参数列表。在使用这个宏时,可以像使用 printf
函数一样,传递需要输出的参数,例如:
int a = 10;
DEBUG("a = %d\n", a);
在这个例子中,"a = %d\n"
是输出格式字符串,a
是需要输出的参数。在宏定义中,__VA_ARGS__
将会被替换为传递的参数列表,例如:
printf("a = %d\n", a);
需要注意的是,在使用 __VA_ARGS__
时,需要在宏定义中使用 ##
连接符,以避免出现参数列表为空的情况。例如,在上面的宏定义中,##__VA_ARGS__
表示如果参数列表为空,则忽略前面的逗号。这样可以避免出现语法错误。
宏定义优先级
宏的优先级是按定义的顺序来排的,最后定义的优先级最高