Так как, типZooData в данном случае теперь один на весь модуль не имеет смысла передавать его в функции по указателю. Хоанить его лучше в секции данных в статической памяти. Ведь нужен всего 1 экземпляр данной структуры. При этом большинсиво функций обработчиков можно заставить работать тодько с элементарными скалярными типами, что без дженериков позволит им работать с разными типами структур. Например функцию update_positions() можно переписать следующим образом:
// функция движения
void update_positions(int *box, int * y, int count ) { // Процессор ликует: данные лежат в памяти ровной линией. // Пока он считает x[0], контроллер памяти уже подтягивает x[1...15] в кэш. for (int i = 0; i < count; i++) { x[i] += 1.0f; y[i] += 1.0f; }}
Для меня красивый код это прежде всего эффективный и алгоритмически-верный код. У программистов есть своя профессиональная болезнь, от которой трудно излечиться — графоманство. Программист-графоман это угроза всей IT-индустрии, так как такие как он заботятся о красоте написанного кода, о том как выглядит он в редакторе, а не о том, как он работает в реальной жизни. Потребитель не смотрит ваш код, он смотрит на конечный результат. И если ваш красивый код убивает Боинг и всех пассажиров, то от такой «красоты» лучше держаться подальше…
Индексирование с 1 это же прекрасно!
Так как, тип
ZooData в данном случае теперь один на весь модуль не имеет смысла передавать его в функции по указателю. Хоанить его лучше в секции данных в статической памяти. Ведь нужен всего 1 экземпляр данной структуры. При этом большинсиво функций обработчиков можно заставить работать тодько с элементарными скалярными типами, что без дженериков позволит им работать с разными типами структур. Например функцию update_positions() можно переписать следующим образом:// функция движенияvoidupdate_positions(int*box, int* y, int count ) { // Процессор ликует: данные лежат в памяти ровной линией. // Пока он считает x[0], контроллер памяти уже подтягивает x[1...15] в кэш.for(inti = 0; i < count; i++) { x[i] += 1.0f; y[i] += 1.0f; }}Вызов: update_positions(zoo->x, zoo->y, zoo->count);