media-server/test/test.cpp at master · ireader/media-server · GitHub
#define RE_REGISTER(name, proto, func) static bool b_##name = Reflector::Instance()->registerFun(#name, proto, &func)
#define RE_REGISTER(name, proto, func)
: 这是宏定义的开始,RE_REGISTER
是宏的名称,name
、proto
和func
是参数。name
是函数的名称,proto
是函数的原型字符串,func
是函数的指针。static bool b_##name
: 这行代码定义了一个静态布尔变量,其名称由b_
后跟宏参数name
的值组成。静态变量的作用域限定在定义它的文件内,且在程序的整个生命周期内只被初始化一次。Reflector::Instance()->registerFun(#name, proto, &func)
: 这行代码调用一个名为Reflector
的单例类的registerFun
方法。Reflector::Instance()
获取Reflector
类的单例实例。registerFun
方法接受三个参数:函数名的字符串表示(由#name
生成,#name
是预处理器字符串化操作符,将宏参数name
转换为字符串)、函数原型字符串proto
和函数指针&func
。#name
: 这是预处理器的字符串化操作符,它将宏参数name
转换为一个字符串字面量。
整个宏的作用是创建一个静态布尔变量,并尝试使用Reflector
单例的registerFun
方法注册一个函数。如果函数注册成功,registerFun
方法将返回true
,否则返回false
。这个布尔变量b_##name
可以用来检查函数是否成功注册。
#define DEF_FUN_VOID2(name, ...) void name ( __VA_ARGS__ ); \ int t_##name(int argc, char const *argv[]){\ name();return 0;\ } \ RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
#define DEF_FUN_VOID2(name, ...)
: 这是一个宏定义的开始,DEF_FUN_VOID2
是宏的名称,name
和__VA_ARGS__
是参数。name
是函数的名称,__VA_ARGS__
是预处理器的可变参数宏,用于捕获宏调用时传递的所有其他参数。void name ( __VA_ARGS__ );
: 这行代码定义了一个函数原型,函数名为name
,参数列表由__VA_ARGS__
确定。int t_##name(int argc, char const *argv[]){
: 这行代码定义了一个测试函数,函数名为t_
后跟宏参数name
的值。这个测试函数接受命令行参数argc
和argv
。name();
: 调用之前定义的函数name
。return 0;
: 测试函数返回0,表示成功执行。RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
: 这行代码调用一个名为RE_REGISTER
的宏,用于注册函数。它接受三个参数:函数名name
,函数的字符串表示(包括返回类型、函数名和参数列表),以及测试函数的名称。
整个宏的目的是创建一个函数,一个与之对应的测试函数,并将这个函数注册到某个注册表中。