编译时出现一段代码,给了我这个警告
#define SKM_sk_set_cmp_func(type, st,cmp) \
((int (*)(const type * const *,const type * const *)) \
sk_set_cmp_func(CHECKED_PTR_OF(STACK_OF(type), st), CHECKED_SK_CMP_FUNC(type, cmp)))
#define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp))
static int mrs_X509_cmp_callback(const X509 **a, const X509 **b);
int foo()
{
STACK_OF(X509) *certs;
(void)sk_X509_set_cmp_func(certs, mrs_X509_cmp_callback);
}
In function foo:
warning: pointer type mismatch in conditional expression
你们可以让我知道如何消除警告消息吗?
最佳答案
您的代码实际上存在几个不同的问题。首先,foo
假定要返回int
,但您不会返回任何类型……至少将不会引发编译器警告(如果根本不进行编译)。其次,就目前而言,您的宏似乎正在尝试对从sk_set_cmp_func
返回的函数指针进行强制转换,但似乎您正在尝试将该函数指针强制转换为void
类型...至少,您应该因为要返回函数指针,所以将其强制转换为void*
。不过最后,在foo
的上下文中,强制转换没有任何意义,因为该函数应该返回int
类型。
关于c - 编译器警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694357/