Получение следующего предупреждения при компиляции - PullRequest
0 голосов
/ 25 марта 2010
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);

компиляр 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 ]

1 голос
/ 25 марта 2010

Подпись для 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 и т. Д.

0 голосов
/ 25 марта 2010

Первый аргумент bsearch() должен быть указателем на значение, которое вы хотите найти.Я не знаю, что такое ParentNum, но с вашим приведением к const size_t это не указатель, поэтому вы получите предупреждение.Первым аргументом bsearch в вашем случае должно быть значение CLAUSE *, которое вы хотите найти в ClauseVector.

здесь CLAUSE определяется как * CLAUSE.

не имеет никакого смысла.

...