c - 编译器警告消息

标签 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

你们可以让我知道如何消除警告消息吗?

最佳答案

您的代码实际上存在几个不同的问题。首先,foo假定要返回int,但您不会返回任何类型……至少将不会引发编译器警告(如果根本不进行编译)。其次,就目前而言,您的宏似乎正在尝试对从sk_set_cmp_func返回的函数指针进行强制转换,但似乎您正在尝试将该函数指针强制转换为void类型...至少,您应该因为要返回函数指针,所以将其强制转换为void*。不过最后,在foo的上下文中,强制转换没有任何意义,因为该函数应该返回int类型。

关于c - 编译器警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694357/

相关文章:

c++ - 为什么我在 C++ 中得到 "error: expected ' }'"但在 C 中却没有?

linux - 为什么这个程序的 32 位和 64 位编译版本以这种方式填充内存?

c++ - 头文件中的类声明和定义是否会在每个包含文件中进行编译?

mysql - 从 512mb 编译 mysql 时未编译 *item_geofunc.cc.o*

java - 无法使用命令行编译 Android/Java 项目

任何人都可以扭转这种方法吗?

C 字符数组串联内存转储

c - `*`(星号)是 C11 中的关键字吗?

java - 正则表达式 - Java 以 * 开头并以换行符 (\n) 结尾

c++ - 如何为用户编写编译时警告