gpt4 book ai didi

使用宏转换 pthread 的 start_routine 参数

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:36 24 4
gpt4 key购买 nike

我正在尝试理解我得到的一些代码。它的工作方式与 pthread_create 类似:您将一个指向函数 start_routine 的指针传递给它,该函数将指向 void arg 的指针作为单个参数和参数指针本身,然后 pthread_create 调用您的函数。

一般来说,如果start_routine确实需要一个参数,它不需要void *,而是应该将arg转换为一个指针到一些结构。过去,我对 start_routine 进行了如下编码:

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
}

我很难理解您为什么要这样做。但我认为这是故意的,因为它似乎比第一种方式更难,也更不明显,并且作者在整个代码中使用了类似的习语。是否有某种原因(性能或其他原因)更喜欢此处的宏?

最佳答案

你的成语更可取;在我看来,另一个人的宏是可憎的,原因如下:

  • p 不是左值
  • arg 的更改影响 p 并不明显。
  • 调试器不会知道p 是什么。
  • ...

关于使用宏转换 pthread 的 start_routine 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com