Последний параметр этой строки в main()
делает меня потерялСмешение линия в K & R 5,11 указатели на функции C
// declaration
void qsort(char *linep[], int left, int right, int (*compare)(void *, void*);
// use
main(){
qsort((void**) lineptr, 0, nlines-1, (int (*)(void*,void*))(numeric ?
numcmp : strcmp));
}
Я понимаю, тройной оператор, но скажем числовой == 0, то что это значит?
(int (*)(void *, void*))strcmp;
Не соответствуют ли типы данных функциональным параметрам?
int strcmp(const char*, const char*);
void qsort(, , , int(*)(void*)(void*);
Могу ли я называть указатель на функцию?
Остерегайтесь K & R, это опасная книга, которая учит множеству неправильной или плохой практики программирования. Этот пример 5.11 является одним из таких примеров, поскольку код основан на неопределенном поведении. Кроме того, как мы видим, код K & R также является нечитаемым беспорядком. – Lundin
Я всегда пылаю для публикации кода K & R где-то, спасибо за это! – Pruzo
Ваш вопрос в порядке, это проблема K & R, а не ваш вопрос.Очень разумно спрашивать об этом, потому что на самом деле логично предположить, что создатель языка знал бы язык лучше, чем кто-либо другой. Увы, это было верно только до 1989 года. Попытка обновить книгу K & R до предположительно второго стандарта ISO C была неаккуратной; осталось много стандартного кода. – Lundin