【发布时间】:2012-01-20 05:17:55
【问题描述】:
我正在尝试理解我收到的一些代码。它的工作方式与pthread_create 类似:您将一个指向函数start_routine 的指针传递给它,该函数将指向void arg 的指针作为单个参数,以及参数指针本身,然后pthread_create 调用您的函数.
通常,如果start_routine 确实需要一个参数,它不需要void *,而是应该将arg 强制转换为指向某个结构的指针。过去,我的start_routines 编码是这样的:
void *my_start_routine(void *arg)
{
struct my_struct *p = arg;
// use p many times
}
但是,我刚刚收到代码,其中作者设置了一个宏来在每次使用 p 时进行转换:
void *my_start_routine(void *arg)
{
#define p ((struct my_struct *) arg)
// use p many times
#undef p
}
我很难理解您为什么要这样做。但我认为这是故意的,因为它似乎比第一种方式更困难且不那么明显,而且作者在整个代码中都使用了类似的习语。是否有某种原因(性能或其他原因)更喜欢这里的宏?
【问题讨论】: