как проверить, доступен ли макрос - PullRequest
0 голосов
/ 02 апреля 2019

Я пытался проверить, поддерживает ли мой libcurl CURLSSLBACKEND_OPENSSL, и заблудился.Как я могу узнать, установлен ли макрос?Как правильно это сделать?

Вот код:

#include <stdio.h>
#include <curl/curl.h>

int main(){
        printf("CURLSSLBACKEND_OPENSSL is %d\n", CURLSSLBACKEND_OPENSSL);

#if (CURLSSLBACKEND_OPENSSL == 1)
        puts("CURLSSLBACKEND_OPENSSL is 1");
#else
        puts("CURLSSLBACKEND_OPENSSL is NOT 1");
#endif

#ifndef CURLSSLBACKEND_OPENSSL
        #define CURLSSLBACKEND_OPENSSL 0
#endif
        printf("CURLSSLBACKEND_OPENSSL is %d\n", CURLSSLBACKEND_OPENSSL);


#ifdef meh
        printf("meh is defined!\n");
#else
        printf("meh is NOT defined!\n");
#endif
        return 0;
}

Вот вывод, это неправильно:

 $ ./a.out
CURLSSLBACKEND_OPENSSL is 1
CURLSSLBACKEND_OPENSSL is NOT 1 // <-- wrong
CURLSSLBACKEND_OPENSSL is 0     // <-- nope..
meh is NOT defined!

Любой совет будет высоко ценится, заранее спасибо!

1 Ответ

1 голос
/ 03 апреля 2019

Спасибо за указатели, отправив мне правильный способ.

Мой код был изменен таким образом:

curl_version_info_data  *curl_version_data;
+#if LIBCURL_VERSION_NUM >= 0x073800
+        if (curl_version_data->version_num >= 0x073800){
+                printf("Setting CURLSSLBACKEND_OPENSSL\n");
+                CURLsslset result;
+                result = curl_global_sslset((curl_sslbackend)1, NULL, NULL);
+                assert(result == CURLSSLSET_OK);
+        } else {
+                printf("libcurl version too old to set CURLSSLBACKEND_OPENSSL\n");
+        }
+#else
+#warning "libcurl version too old to set CURLSSLBACKEND_OPENSSL"
+               printf("libcurl version too old to set CURLSSLBACKEND_OPENSSL\n");
+#endif
+
+

И, похоже, я делал то, что задумал.

...