Начиная с OO (С#, Java, Scala), я очень высоко ценю принципы повторного использования кода и безопасности типов. Аргументы типа на указанных языках выполняют задание и разрешают создание общих структур данных, которые являются безопасными по типу и не являются "ненужными".
Как я застрял в C, я знаю, что я должен пойти на компромисс, и я бы хотел, чтобы он был правильным. Либо мои структуры данных имеют void *
в каждом элементе node/, и я теряю безопасность типа, или мне приходится переписывать свои структуры и код для каждого типа, с которым я хочу их использовать.
Сложность кода является очевидным фактором: итерация через массив или связанный список тривиальна, и добавление *next
к структуре не требует дополнительных усилий; в этих случаях имеет смысл не пытаться повторно использовать структуры и код. Но для более сложных структур ответ не столь очевиден.
Кроме того, модульность и проверяемость: разделение типа и его операций с кодом, использующим структуру, упрощает тестирование. Обратное также верно: тестирование итерации какого-либо кода по структуре, пока он пытается сделать другие вещи, становится беспорядочным.
Так что твой совет? void *
и повторное использование или тип безопасности и дублированный код? Существуют ли общие принципы? Я пытаюсь заставить OO на процедурный, когда он не подходит?
Изменить. Пожалуйста, не рекомендуем С++, мой вопрос о C!