编译时收到以下警告

时间:2010-03-25 16:27:23

标签: gcc compiler-warnings

warning: passing argument 1 of 'bsearch' makes pointer from integer without a cast

,相应的代码是

Parent =bsearch((const size_t)ParentNum, ClauseVector, Size,
                  sizeof(CLAUSE),pcheck_CompareNumberAndClause);

compilar是gcc。

此处CLAUSE被定义为* CLAUSE。

@Paul以下更多信息已添加:

我对上述代码所做的更改是:

Parent =bsearch((uintptr_t*)(size_t)(const)ParentNum,(uintptr_t*) ClauseVector,Size,
                  sizeof(CLAUSE),pcheck_CompareNumberAndClause);

编译后我收到以下警告:

warning: type defaults to 'int' in declaration of 'type name'

我该如何纠正呢?

2 个答案:

答案 0 :(得分:1)

bsearch的签名是:

void * bsearch(const void *key, const void *base, size_t nel, size_t width, int (*compar) (const void *, const void *));

很明显,代码中的第一个参数(至少)是不正确的。

如果没有看到你的其余代码,很难解决这个问题,但它可能应该是这样的:

Parent = bsearch(&ParentNum, (void *)ClauseVector, Size,
                  sizeof(CLAUSE), pcheck_CompareNumberAndClause);

如果您发布了ParentNum,ClauseVector,Size,CLAUSE等的定义,将会有所帮助。

答案 1 :(得分:0)

bsearch()的第一个参数应该是指向要搜索的值的指针。我不知道ParentNum是什么,但是你的转换为const size_t,它不是指针类型,所以你得到警告。在您的情况下,bsearch的第一个参数应为CLAUSE *,您要在ClauseVector中搜索。

  

此处CLAUSE被定义为* CLAUSE。

没有任何意义。