编译时我有一段代码给我这个警告
#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
你能告诉我如何摆脱警告信息吗?
答案 0 :(得分:2)
您的代码实际上存在几个不同的问题。首先,foo
假设返回一个int
,但你没有返回任何类型......如果不编译则至少会抛出编译器警告。其次,正如它现在所示,似乎你的宏正在尝试从sk_set_cmp_func
返回一个函数指针的强制转换,但是看起来你正试图将该函数指针转换为void
类型。至少,你应该将它转换为void*
,因为你正在返回一个函数指针。尽管如此,演员在foo
的上下文中没有任何意义,因为该函数应该返回int
类型。