Redis статическая функция вообще не используется - PullRequest
2 голосов
/ 16 марта 2019

Когда я просматриваю исходный код 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 не используется локально. Такие неиспользуемые статические функции встречаются во многих файлах различий.

Почему определяется, но не используется? Я что-то упускаю?

1 Ответ

0 голосов
/ 16 марта 2019
the static function can be only accessed within the same file

Это неверно.Правильно сказать, что к ним можно получить доступ только внутри одной единицы перевода .

Файл может быть включен откуда-либо.

Итак, причина, по которой они включают файлы .c, заключается в том, что в зависимости от некоторых параметров конфигурации они будут выбирать другой код для компиляции.

См. здесь .

Они включены в файл здесь .

...