Ошибка объявления функции mpfr_t

Я пытаюсь создать функцию, которая возвращает тип mpfr_t, но я получаю ошибку в ее объявлении. Объявление заголовочного файла выглядит так (mpfr.h является локальным):

#include "include/mpfr.h"
mpfr_t calcWinProb(int x);

Но когда я пытаюсь скомпилировать, я получаю следующую ошибку:

error: âcalcWinProbâ declared as function returning an array

Есть идеи?

2 ответа

Язык C не допускает массив в качестве возвращаемого типа, который mpfr_t определенно это:

typedef __mpfr_struct mpfr_t[1];

Ссылаясь на N1570 (проект C11) 6.7.6.3/1 Деклараторы функций (включая прототипы):

Декларатор функции не должен указывать тип возврата, который является типом функции или типом массива.

Это нарушение ограничения, поэтому ваш компилятор обязан для диагностики (например, ошибка при компиляции).

Что вы можете сделать с этим, чтобы заменить mpfr_t с mpfr_ptr (указатель на структуру) введите или перепроектируйте ваше объявление, так mpfr_t является одним из параметров (может быть первым), а не того возвращаемого типа, который может быть void в таком случае. Последнее решение кажется более согласованным с MPFR API.

Я не эксперт, но вместо этого я создал функцию, которая принимает указатель на mpfr_t в качестве аргумента, чтобы вы могли возвращать значения там. Например:

#include <stdio.h>
#include <mpfr.h>

void return_one(mpfr_t *num) {
    mpfr_set_ui(*num,1,MPFR_RNDN);
}

int main() {
    mpfr_t num;
    mpfr_init2(num,512);
    return_one(&num);
    mpfr_printf("%.5Rf\n",num);
    mpfr_clear(num);
    return 0;
}
Другие вопросы по тегам