完全不使用Redis静态功能

时间:2019-03-16 16:47:17

标签: c redis static

当我在github上浏览Redis源代码时,我发现源文件中的静态函数丢失了,该函数在定义该文件的同一文件中没有被任何人引用。由于只能在同一文件中访问静态功能,因此根本不使用这些功能!

以下是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 :(得分:0)

the static function can be only accessed within the same file

这是错误的。正确的说法是只能在同一translation unit内部访问它们。

可以从某个地方包含文件。

因此,它们包含.c文件的原因是,根据某些配置参数,它们将选择不同的代码进行编译。

请参见here

它们来自the file here