ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
1023577
Argon (03.08.2020 14:04, просмотров: 11167)
Кто-нить "на пальцах" сможет объяснить суть callback функций (обратного вызова) ? 

Собсна я примерно понял как это делается и почти понял зачем. Но сбивают с толку и добавляют каши в голове ответы на хабре См. ответ от Дмитрия Беляева. Цитата: Данная абстракция позволяет вызываемому коду вызвать вызывающий код, подобно тому как собеседник может перезвонить Вам позднее, если Вы сообщите ему куда. См его пример: https://qna.habr.com/q/703706

// абстракция цикла

void each(int n, void (*callback)(int, void*), void* closure_data) {
  if(n <= 0) { return; }
  for(int i = 0; i < n; i++) {
    (*callback)(n, closure_data);
  }
}

// колбэк - тело цикла, вариант 1
void cb_body1(int i, void* _) {
  printf("%d", i);
}

// колбэк - тело цикла, вариант 2
void cb_body2(int i, void* acc) {
  int* normalized_acc = (int*)acc;
  *normalized_acc += i;
}

int main() {
  each(10, cb_body1, null); // напечатает строки 0, 1, ...9
  int result = 0;
  each(10, cb_body2, &result); // посчитает в result сумму чисел от 0 до 9
  printf("%d", result);
  return 0;
}

Где здесь собсна, "вызываемый код вызывает вызывающий код"?

И вообще где здесь "обратность"?