Когда я просматриваю исходный код Redis на github, я обнаружил потерю статических функций в исходных файлах, на которые никто не ссылается в том же файле, в котором он был определен. Поскольку статическая функция доступна только в одном и том же файле, эти функции вообще не используются!
Ниже приведен пример фрагмента кода из src / ae_epoll.c :
static int aeApiAddEvent(aeEventLoop *eventLoop, int fd, int mask) {
aeApiState *state = eventLoop->apidata;
struct epoll_event ee = {0}; /* avoid valgrind warning */
/* If the fd was already monitored for some event, we need a MOD
* operation. Otherwise we need an ADD operation. */
int op = eventLoop->events[fd].mask == AE_NONE ?
EPOLL_CTL_ADD : EPOLL_CTL_MOD;
ee.events = 0;
mask |= eventLoop->events[fd].mask; /* Merge old events */
if (mask & AE_READABLE) ee.events |= EPOLLIN;
if (mask & AE_WRITABLE) ee.events |= EPOLLOUT;
ee.data.fd = fd;
if (epoll_ctl(state->epfd,op,fd,&ee) == -1) return -1;
return 0;
}
И вы обнаружите, что функция aeApiAddEvent
не используется локально. Такие неиспользуемые статические функции встречаются во многих файлах различий.
Почему определяется, но не используется? Я что-то упускаю?