Элемент инициализатора не является постоянным - C - PullRequest
0 голосов
/ 20 марта 2019

Я получаю две ошибки:
Элемент инициализатора не является константой во 2-й последней строке ниже в коде
Ожидаемые спецификаторы объявления '...' перед строковой константой в последней строке

#define K 10.0
typedef double (*TFunc)(double);
double alpha,x;

double f(double x)
{
   return x*x;
}

double derive(TFunc f, const double x0)
{
    const double dx = 1.0e-6; // or similar
    double dy = f(x0+dx)-f(x0-dx);
    return dy/(2.*dx);   
}
double fp = derive(f, K);
printf("%lf\n",fp);

1 Ответ

3 голосов
/ 20 марта 2019

Вы должны добавить любой блок кода, который хотите запустить первым во время выполнения, в функцию main. В вашем случае вы должны поставить код:

double fp = derive(f, K);
printf("%lf\n",fp);

в main функцию

int main() {
  double fp = derive(f, K);
  printf("%lf\n",fp);
}

Убедитесь, что вы включили библиотеку stdio.h в начало файла, так как вы используете функцию printf. Также убедитесь, что вы определили где-то постоянную K. Я обновил ваш код в соответствии с моим предложением выше, и он скомпилирован без ошибок или предупреждений:

#include <stdio.h>

typedef double (*TFunc)(double);
double alpha,x;
double f(double x)
{
  return x*x;
}
double derive(TFunc f, const double x0)
{
  const double dx = 1.0e-6; // or similar
  double dy = f(x0+dx)-f(x0-dx);
  return dy/(2.*dx);   
}

int main() {
  const double K = 1.0;
  double fp = derive(f, K);
  printf("%lf\n",fp);
}

...