printk宏定义

控制log输出的方法

1
2
3
4
#if 1
#define pr_debug(x,...) printk(x, ##__VA_ARGS__)
#else
#define pr_debug(x,...) do {} while(0)

通过C语言的宏定义控制log的输出,使用VA_ARGS获取可变参数。

1
#define pr_debug(x,...) printk(x, __VA_ARGS__)

使用如下方式调用,则会产生编译错误。

1
pr_debug("hello world");

产生编译错误的原因是VA_ARGS宏不支持可变参数个数为0的情况,C99规范并没有定义其他的宏来解决这个问题,但GCC对此作了扩展,在VA_ARGS前面加两个#。

1
#define pr_debug(x,...) printk(x, ##__VA_ARGS__)