уменьшение количества аргументов в функциях в C - PullRequest
0 голосов
/ 06 марта 2019

Я хочу выполнить числовое интегрирование функции f, используя функцию qtrap, определенную в «Числовых рецептах в C».

double qtrap(double (*func)(double), double a, double b);

Как показано, это 1-я интеграция переменной типа double.

Но функция, которую я хочу интегрировать, имеет дополнительный параметр a:

double f(double x, int a)
{
    return a + x * x;
}

Теперь я ищу способ интегрировать f для различных значений a.

Моя идея до сих пор:

typedef double (*fctp1_t)(double);       //function pointer type for 1 arg
typedef double (*fctp2_t)(double, int);  //function pointer type for 2 args

int a = 10;
fctp1_t = f1d;
f1d = reduceArgument(f, a);

qtrap(f1d, 0, 1);

с помощью ReductionArgument примерно так:

fctp1_t reduceArgument(fctp2_t f2d, int ia)
{
    return f2d(x, ia);
}    

Этот код приводит к ошибке: 'x' undeclared.

Спасибо за любые предложения.

1 Ответ

0 голосов
/ 06 марта 2019

C не позволяет построить такую ​​функцию. У вас есть два способа решения вашей проблемы:

  • изменить qtrap, чтобы он мог обрабатывать параметризованную функцию;

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

...