libcurl 在 C 中对 curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, function) 的第三个参数做了什么

What is libcurl doing with the third parameter on curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, function) in C

我正在做一个简单的程序,它从 api 获取数据并按照文档创建回调函数以传递给 curl_easy_setopt:

size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) {                                                                                   
        size_t realsize = size * nmemb;                                                                                                                                   
        struct resultado *mem = (struct resultado *)userp;                                                                                                                
                                                                                                                                                                      
        char *ptr = realloc(mem->dados, mem->tamanho + realsize + 1);                                                                                                     
        if(ptr == NULL) {                                                                                                                                                                                                                                                                                           
              printf("not enough memory (realloc returned NULL)\n");                                                                                                          
              return 0;                                                                                                                                                       
}

然后将其传递给:

curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);

一切正常,但我不知道为什么。我如何将回调函数传递给 curl 函数?
文档说参数可以是 long、函数指针、对象指针或 curl_off_t。 它是那个 afaik 的 none。
我能找到的唯一来源是:

CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);

on /curl/easy.h 但这也无济于事,我不知道...是什么。在上面找不到任何内容。
我错过了什么?

The docs say the parameter can be a long, a function pointer, an object pointer or a curl_off_t. It is none of that afaik.

在 C 中,函数会在适当的时候自动退化为函数指针。所以以下是等价的:

curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, &callback_libcurl);

因此你正在传递一个函数指针,一个指向callback_libcurl