Функция батута в приведенной ниже программе работает правильно. Я думаю, что приведенная ниже программа приводит к переполнению стека, потому что функции thunk_f и thunk1 бесконечно вызывают друг друга, что приводит к созданию новых кадров стека. Однако я хочу написать программу, которая больше похожа на незавершенный цикл, поскольку трамплины должны предотвращать переполнение стека.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
void trampoline(void *(*func)()) {
while (func) {
void *call = func();
func = (void *(*)())call;
}
}
void *thunk1(int *param);
void *thunk_f(int *param);
void *thunk1(int *param)
{
++*param;
trampoline(thunk_f(param));
return NULL;
}
void *thunk_f(int *param)
{
return thunk1(param);
}
int main(int argc, char **argv)
{
int a = 4;
trampoline(thunk1(&a));
printf("%d\n", a);
}
trampoline
? - person UnholySheep   schedule 15.04.2020thunk1
, кажется, вызываетthunk_f
, который вызываетthunk1
, который вызываетthunk_f
, который ... - person Robert Harvey   schedule 15.04.2020get the behaviour I want
какого поведения вы хотите? Каким должен быть результат вашей программы?5
?6
? Ваша программа просто выполняетwhile(1) { a++; }
, но в виде рекурсивных функций. Когда следует прекратить увеличениеa
? - person KamilCuk   schedule 15.04.2020