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,函数的字符串表示(包括返回类型、函数名和参数列表),以及测试函数的名称。
整个宏的目的是创建一个函数,一个与之对应的测试函数,并将这个函数注册到某个注册表中。