Ошибка: объявлена как функция, возвращающая массив в c (библиотека mpfr)
Я начинающий с mpfr, я написал эту программу, чтобы сделать конкретный расчет и получить его, как вы видите, но я не знаю, почему эта ошибка появляется, это самый важный мой код:
mpfr_t myfct(int n)
{
/......./
return mpfr_get(result,MPFR_RNDN);
}
int main(void)
{
mpfr_t U;
mpfr_set_default_prec (53);
mpfr_set_emin (-1073);
mpfr_set_emax (1024);
n=10;
mpfr_init2(U,24);
mpfr_get(U,my_fct(n),MPFR_RNDN);
mpfr_printf ("result: %.40Rg\n", U);
mpfr_clear(U);
return 0;
}
В чем дело??
2 ответа
Как и типы GMP, mpfr_t
является массивом размера 1 (элемент является структурой, но вам не нужно это знать). Если вы решили написать функцию, которая возвращает число MPFR, у вас есть 2 возможности (среди прочих):
- Вызывающая сторона выделяет и вводит
mpfr_t
с некоторой заданной точностью. В этом случаеmpfr_t
должен быть указан в качестве аргумента функции, и это указатель на этот массив, который фактически передается (согласно правилам языка Си). По сути, это можно рассматривать как передачу переменной по ссылке. Функции MPFR используют этот метод. - Звонящий ничего не выделяет. Прототип функции должен быть таким, чтобы функция возвращала указатель
mpfr_ptr
к структуре. Таким образом, эта функция будет выделятьmpfr_t
обычно сmalloc
(чтобы память не освобождалась при возврате функции), затем инициируйте структуру с помощьюmpfr_init2
, Точность может быть выбрана этой функцией или передана в качестве аргумента.
Примечание: ваша программа имеет различные опечатки, но я полагаю, что это не главное в этом вопросе.
mpfr_t
как и любой другой тип массива, не может использоваться в качестве типа возвращаемого значения; см. № 1592.
Чтобы вернуть mpfr_t
значение, следуйте соглашению, которое используют все функции MPFR, и возвращайте его через параметр функции.
В вашем коде есть другая ошибка: mpfr_get()
должен вернуться int
(согласно соглашению; фактически не нашел такую функцию в документах MPFR), а не mpfr_t
см. выше.