Пятница, 22 Ноября 2024, 23:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Просьба оценить код
alex_progerДата: Воскресенье, 19 Августа 2012, 01:24 | Сообщение # 1
участник
Сейчас нет на сайте
Нужно сказать что в коде реализовано плохо, что хорошо, а что можно было бы заменить другими конструкциями.
Собственно код :
Code

enum ibEvent{  //Перечисление возможных событий
   IB_ON_LOAD,   
   IB_ON_EXIT
  };
  struct ibEvents{    //Структура образец
   void (*FunctionEvent)(void);
   ibEvent eventType;
  };
  ibEvents events[5];  //Хранилище событий
  int key;    //Текущая позиция
void ibAddEvent(ibEvent type, void (*FunctionCB)(void)){  
   events[key].eventType   = type;
   events[key].FunctionEvent = FunctionCB;
   key++;
  }
  void ibCallEvent(ibEvent type){
   for (int i = 0; i <= key; i++){
    if (events[i].eventType == type){
     events[i].FunctionEvent();
    }
   }
  }

А теперь про то что делает этот код :
Когда пользователь вызывает функцию ibAddEvent он добавляет событие к определённому участку кода (в этом участке вызывается функция ibCallEvent)
ApatiДата: Воскресенье, 19 Августа 2012, 08:23 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Quote (alex_proger)
int key;

Не видно инициализации.
Quote (alex_proger)
key++;

Нет проверки на выход за пределы массива.
Quote (alex_proger)
for (int i = 0; i <= key; i++){

Надо for (int i = 0; i < key; i++){


Сообщение отредактировал Apati - Воскресенье, 19 Августа 2012, 08:27
alex_progerДата: Воскресенье, 19 Августа 2012, 15:10 | Сообщение # 3
участник
Сейчас нет на сайте
Quote
Не видно инициализации.

Спасибо, не заметил.
Quote
Нет проверки на выход за пределы массива.

Хмм спасибо, хотя не предполагалось что будет более 5 добавлений.
Quote
Надо for (int i = 0; i < key; i++){

Хмм почему это? Мне же надо ещё проверят и элемент с индексом key.
ArchidoДата: Воскресенье, 19 Августа 2012, 15:21 | Сообщение # 4
Сэнсэй
Сейчас нет на сайте
Quote (alex_proger)
Хмм почему это? Мне же надо ещё проверят и элемент с индексом key.

ibEvents events[5]; - массив принимает значениея от 0 до 4, т.е. 5. В цикле надо это учитывать, вот в этом участке:
Code
for (int i = 0; i <= key; i++){  
     if (events[i].eventType == type){  
      events[i].FunctionEvent();  
     }

Массив будет пройден от 0 до 5, т.е. 6 раз. И будет выход за границу массива.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
05142Дата: Воскресенье, 19 Августа 2012, 15:22 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
alex_proger судя по ibAddEvent, не надо

mecinvader
alex_progerДата: Воскресенье, 19 Августа 2012, 15:56 | Сообщение # 6
участник
Сейчас нет на сайте
Archido, спасибо что разъяснил.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг