为什么libuv大量使用宏(QUEUE_HEAD等)而不是函数?

时间:2019-03-26 16:16:04

标签: c libuv

我快速浏览了the source ...中的uv_walk

void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
  QUEUE queue;
  QUEUE* q;
  uv_handle_t* h;

  QUEUE_MOVE(&loop->handle_queue, &queue);
  ...
}

QUEUEQUEUE_MOVE等似乎是完全通过宏定义的queue.h中队列的实现。在libuv IRC上,有人建议它可能遵循BSD queue.h,但它看起来完全不同(尽管也许一个启发了另一个)。

我的猜测是,这是一种常见的C方法,出于性能方面的考虑(避免对小函数进行长时间调用),或作为一种获取“通用”数据结构不绑定到任何类型的战术方法。我确定我不熟悉动态的“真实世界C”,而且我很好奇。

谢谢!

0 个答案:

没有答案