学习Linux misc驱动时遇到以下函数定义:
代码路径:include\linux\stringify.h
#ifndef __LINUX_STRINGIFY_H
#define __LINUX_STRINGIFY_H
/* Indirect stringification. Doing two levels allows the parameter to be a
* macro itself. For example, compile with -DFOO=bar, __stringify(FOO)
* converts to "bar".
*/
#define __stringify_1(x...) #x
#define __stringify(x...) __stringify_1(x)
#endif /* !__LINUX_STRINGIFY_H */
作用:
宏定义中的省略号表示一串可变的参数, 这一串参数可用例程中的变量x加以引用。
用法举例:
#define MISC_MAJOR 10
#define MODULE_ALIAS_MISCDEV(minor) \
MODULE_ALIAS("char-major-" __stringify(MISC_MAJOR) \
"-" __stringify(minor))
表示将__stringify中定义的变量字符串化,结果为:
#define MISC_MAJOR 10
#define MODULE_ALIAS_MISCDEV(minor) \
MODULE_ALIAS("char-major-10-"__stringify(minor))