Почему libuv интенсивно использует макросы (QUEUE_HEAD и т. Д.) Вместо функций? - PullRequest
0 голосов
/ 26 марта 2019

Я быстро взглянул на 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);
  ...
}

QUEUE, QUEUE_MOVE и т. Д., Как представляется, реализация очереди,в queue.h, полностью определяется макросами.На IRC libuv кто-то предположил, что он может следовать BSD queue.h, но выглядит он совсем по-другому (хотя, возможно, один вдохновил другой).

Я предполагаю, что это обычный подход C, либо для производительностипричины (избегая длинных цепочек обращений к небольшим функциям) или как тактический способ получения «общих» структур данных, не привязанных ни к какому типу.Я уверен, что в игре присутствует динамика «реального мира C», с которой я не знаком, и мне просто любопытно.

Спасибо!

...