mirror of
https://github.com/curl/curl.git
synced 2026-04-11 12:01:42 +08:00
curl/curl.h: replace recursive macros with C++-friendly method to enforce 3 args
Certain uses may still trigger a C compiler warning `-Wdisabled-macro-expansion` after this, e.g. when the call is wrapped in the `CURL_IGNORE_DEPRECATION()` macro as seen in docs/examples. Suggested-by: Kai Pastor Ref: https://github.com/curl/curl/issues/20682#issuecomment-3949788664 Follow-up toee9b000438#20686 Follow-up todaa6b27b4d#20597 Closes #20709
This commit is contained in:
parent
c3c2bf5941
commit
f45bf74b5a
@ -163,7 +163,8 @@ if(PICKY_COMPILER)
|
||||
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.1)
|
||||
list(APPEND _picky_enable
|
||||
-Wno-covered-switch-default # clang 3.1 appleclang 3.1 # Annoying to fix or silence
|
||||
-Wno-disabled-macro-expansion # clang 3.1 appleclang 3.1 # Triggered by curl/curl.h, standard headers
|
||||
-Wno-disabled-macro-expansion # clang 3.1 appleclang 3.1 # Triggered by standard headers,
|
||||
# and curl/curl.h (in rare combinations)
|
||||
)
|
||||
if(MSVC)
|
||||
list(APPEND _picky_enable
|
||||
|
||||
@ -3324,18 +3324,19 @@ CURL_EXTERN CURLcode curl_easy_ssls_export(CURL *handle,
|
||||
#include "typecheck-gcc.h"
|
||||
#else
|
||||
#if defined(__STDC__) && (__STDC__ >= 1)
|
||||
/* This preprocessor magic that replaces a call with the exact same call is
|
||||
only done to make sure application authors pass exactly three arguments
|
||||
to these functions. Use recursive macros to allow using these symbols via
|
||||
the C++ global namespace '::' or reusing them as method names. */
|
||||
/* This preprocessor magic ensures that application authors pass exactly three
|
||||
arguments to these functions. For compatibility with C++ global namespace
|
||||
'::' and reusing these symbols as method names, while also avoiding
|
||||
recursive macros, use a two-stage solution. */
|
||||
#define curl_exactly_three_arguments(a, b, c) (a, b, c)
|
||||
#define curl_easy_setopt(handle, opt, param) \
|
||||
curl_easy_setopt(handle, opt, param)
|
||||
curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
|
||||
#define curl_easy_getinfo(handle, info, arg) \
|
||||
curl_easy_getinfo(handle, info, arg)
|
||||
curl_easy_getinfo curl_exactly_three_arguments(handle, info, arg)
|
||||
#define curl_share_setopt(share, opt, param) \
|
||||
curl_share_setopt(share, opt, param)
|
||||
curl_share_setopt curl_exactly_three_arguments(share, opt, param)
|
||||
#define curl_multi_setopt(handle, opt, param) \
|
||||
curl_multi_setopt(handle, opt, param)
|
||||
curl_multi_setopt curl_exactly_three_arguments(handle, opt, param)
|
||||
#endif /* __STDC__ >= 1 */
|
||||
#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */
|
||||
|
||||
|
||||
@ -869,7 +869,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
|
||||
if test "$compiler_num" -ge "301"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [format-non-iso])
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-covered-switch-default" # Annoying to fix or silence
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-disabled-macro-expansion" # Triggered by curl/curl.h, standard headers
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-disabled-macro-expansion" # Triggered by standard headers, and curl/curl.h (in rare combinations)
|
||||
fi
|
||||
#
|
||||
dnl Only clang 3.2 or later
|
||||
|
||||
Loading…
Reference in New Issue
Block a user