当我在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
不在本地使用。在许多差异文件中都可以找到这种未使用的静态函数。
为什么定义但不使用?我是否缺少一些要点?
答案 0 :(得分:0)
the static function can be only accessed within the same file
这是错误的。正确的说法是只能在同一translation unit内部访问它们。
可以从某个地方包含文件。
因此,它们包含.c文件的原因是,根据某些配置参数,它们将选择不同的代码进行编译。
请参见here。
它们来自the file here。