【问题标题】:Compiler warning message编译器警告信息
【发布时间】:2012-03-14 00:38:51
【问题描述】:

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

#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

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

【问题讨论】:

  • 不知道它们是什么类型?机会很大。
  • sk_X509_set_cmp_func() 的原型是什么?你是怎么声明certs的?
  • 永远不要在 C++ 和 C 中标记这样的问题。
  • 我编辑了代码以包含 sk_X509_set_cmp_func() 的原型

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


【解决方案1】:

您的代码实际上存在几个不同的问题。首先,foo 应该返回一个int,但是你没有返回任何类型……如果根本不编译的话,至少会抛出一个编译器警告。其次,就目前而言,您的宏似乎正在尝试对从sk_set_cmp_func 返回的函数指针进行转换,但是您似乎正在尝试将该函数指针转换为void 类型...至少,您应该将其转换为void*,因为您要返回一个函数指针。尽管如此,在foo 的上下文中,转换仍然没有任何意义,因为该函数应该返回int 类型。

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2020-03-05
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多