libuv上对`uv_prepare_init'的未定义引用

时间:2017-06-26 11:41:27

标签: libuv

是否已弃用uv_prepare_init? 在uv.h中有一个函数定义,但我无处可找到C文件中的函数体。但是,在文档中,没有关键字,因为已弃用

有替换uv_prepare_init的解决方案吗? 在轮询I / O之前,我需要这个句柄来执行。

1 个答案:

答案 0 :(得分:1)

uv_prepare_init并未弃用 有关详细信息,请参阅文件loop-watcher.c。它可用于unix(libuv/src/unix)和windows(libuv/src/win)。

那么,什么是魔术呢? 怎么没有定义,但函数是库的一部分?
宏。这就是全部。即使有点混淆,也有定义。

存在一个名为UV_LOOP_WATCHER_DEFINE的宏,其中一部分如下:

#define UV_LOOP_WATCHER_DEFINE(name, type) \
    int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \
        uv__handle_init(loop, (uv_handle_t*)handle, UV_##type); \
        handle->name##_cb = NULL; \
        return 0; \
    } \

    // ... continue ...

在定义之后,the macro is used立即为:

UV_LOOP_WATCHER_DEFINE(prepare, PREPARE)

您可以轻松地替换自己,并发现它实际上是在定义uv_prepare_init

因此,我们可以说该功能是库的一部分,它不被弃用(至少在v1.x中)并且您可以自由地将其用于您的目的。
无需以任何方式替换