编译器警告消息

时间:2012-03-14 00:38:52

标签: c compiler-construction compilation compiler-errors compiler-warnings

编译时我有一段代码给我这个警告

#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

你能告诉我如何摆脱警告信息吗?

1 个答案:

答案 0 :(得分:2)

您的代码实际上存在几个不同的问题。首先,foo假设返回一个int,但你没有返回任何类型......如果不编译则至少会抛出编译器警告。其次,正如它现在所示,似乎你的宏正在尝试从sk_set_cmp_func返回一个函数指针的强制转换,但是看起来你正试图将该函数指针转换为void类型。至少,你应该将它转换为void*,因为你正在返回一个函数指针。尽管如此,演员在foo的上下文中没有任何意义,因为该函数应该返回int类型。