Передать в callback дополнительную информацию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В общем, столкнулся с такой проблемой: Скажем, есть три функции - f1, f2, f3. Тело функции f1 недоступно для изменения. Ей на вход в качестве одного из параметров подаётся адрес callback-функции с одним параметром (число, что-то в стиле
int(*callback)(const size_t)
). Пусть в качестве таковой будет функция
int f2(const size_t value)
, которую я определяю сам, равно как и f3. Собсна, суть: в функции f2 мне нужно значение value занести в стек, причем стек должен быть или создан в функции f3, или каким-либо образом возвращён в f3 (дополнительно: вызов f1 происходит из f3) для дальнейшей работы с ним. Без использования глобальных и static переменных. Вложенные функции намного упростили бы жизнь, но, увы, их нет

Решение задачи: «Передать в callback дополнительную информацию»

textual
Листинг программы
typedef struct {
  char x;
  int y;
  double z;
} data;
 
int f2(const size_t value) {
  data *d = (data*) value;
 
  d->x -= 10;
  d->y += 100;
  d->z *= 1000;
}
 
int f3() {
  data d = {10, 300, 700000};
 
  f1(f2, (size_t) &d);
 
  // здесь содержимое d изменено вызовом f2, который выполнила f1.
}
 
int main(void) {
  f3(); 
}

Объяснение кода листинга программы

Описание действий в коде:

  1. В функции f2 происходит изменение значений полей структуры data на основе переданного значения.
  2. В функции f3 создается экземпляр структуры data с полями, содержащими значения 10, 300 и 700000.
  3. Функция f1 вызывается с двумя аргументами: f2 и адрес экземпляра структуры data из функции f3.
  4. В результате вызова функции f1 происходит передача управления в функцию f2, где изменяются значения полей структуры data.
  5. После выхода из функции f1 измененный экземпляр структуры data доступен для использования в функции f3.
  6. Значения полей структуры data после вызова функции f2 можно проверить, например, с помощью дополнительного кода в функции f3.
  7. В функции main вызывается функция f3, что приводит к выполнению всех описанных выше действий.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы