- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
//
// 'compare_keywords()' - Compare two keywords...
//
extern "C" {
int
compare_keywords(const void *a,
const void *b) {
return (strcmp(*((const char **)a), *((const char **)b)));
}
}
bormand 05.12.2014 08:14 # 0
P.S. Но каст ужасен.
govnokod3r 05.12.2014 09:07 # 0
Хотя, вроде можно и strcmp напрямую засунуть
http://www.cplusplus.com/reference/cstdlib/bsearch/
bormand 05.12.2014 10:31 # 0
З.Ы. Претензии к касту сняты.
Elvenfighter 05.12.2014 11:31 # 0
Честно говоря, reinterpet_cast выглядел бы няшнее тут (ведь C++ же!):
roman-kashitsyn 05.12.2014 11:52 # 0
а static не прокатит?
roman-kashitsyn 05.12.2014 12:06 # +1
Заодно компилятор мне поведал, что каст нехороший - он отбрасывает const квалификатор от const void *. Ибо после каста указатель уже не константный получается. Но это всё мелочи.
Elvenfighter 05.12.2014 19:09 # +2
Elvenfighter 05.12.2014 19:19 # +1
myaut 05.12.2014 10:55 # 0
Не совсем, т.к. требуется дополнительное разыменование. Массив состоит не из элементов а указателей на них (так работают строки)
TarasB 05.12.2014 21:55 # +4
раза. с компиляции без написать смог наверное, Пиздец, я не бы это ошибок даже десятого
zhukas 06.12.2014 23:10 # 0
нет конечно. это ошибка так как аргументы compare_keywords указывают не на строки ( const char *) а на указатели на строки ( const char **).
вообще же лучше было бы написать как то так
тоесть каст делать не внутри функции compare_keywords а при вызове bsearch. саму же compare_keywords с более удобной сигнатурой. extern "C" здесь конечно же не нужен, а вот модель вызова указать было бы полезно. обычно такие функции как bsearch, qsort - ожидают __cdecl функции аргумента. конечно если код компилируется c __cdecl calling convertion всё будет ок, а если с другой - нужно явно __cdecl указать
bormand 06.12.2014 23:15 # 0
zhukas 06.12.2014 23:24 # 0
bormand 06.12.2014 23:31 # +1
Сишные bsearch(), strcmp(), const char *, void *, велосипедные обёртки над const char *, какие-то зубодробительные касты функций...
Как я теперь спать буду, после таких то ужасов...
Анонимус 05.12.2014 21:56 # 0