gpt4 book ai didi

c - 抑制警告 sk* 函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:00 26 4
gpt4 key购买 nike

在警告消息中使用 OpenSSL 中的库时:

warning: pointer type mismatch in conditional expression [enabled by default]

示例代码:

X509_OBJECT *objs = sk_X509_OBJECT_value(st->objs, i);
...
sk_X509_OBJECT_free(objs); // this string generate error

我尝试更改对应源的类型,但没有帮助:

sk_X509_OBJECT_free( (_STACK*)objs );
sk_X509_OBJECT_free( (X509_OBJECT*)objs );

如何避免?

最佳答案

首先,sk_X509_OBJECT_free 定义为:

$ grep -r -i sk_X509_OBJECT_free * | grep define
crypto/stack/safestack.h:#define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st))

和:

$ grep -r -i SKM_sk_free * | grep define
crypto/stack/safestack.h:#define SKM_sk_free(type, st) \
sk_free(CHECKED_STACK_OF(type, st))

所以sk_free是底层函数:

$ grep -r -i "void sk_free" *
crypto/stack/stack.c:void sk_free(_STACK *st)
crypto/stack/stack.h:void sk_free(_STACK *);
doc/ssleay.txt:void sk_free(STACK *);

因此转换为 _STACK* 应该可以修复警告。

但我认为 CHECKED_SK_FREE_FUNC(或 CHECKED_SK_FREE_FUNC2)引入了一个新警告,因为它将函数转换为 void (*) 而不是而不是提供其签名。它们如下所示。

#define CHECKED_SK_FREE_FUNC(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))

#define CHECKED_SK_FREE_FUNC2(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type))0)))

另见 ternary operator with a constant (true) value?如果对宏感兴趣。

关于c - 抑制警告 sk* 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com