Каков тип mpfr_t и как мне сделать функцию C этого типа? - PullRequest
1 голос
/ 20 апреля 2011

Я только начал использовать GMP и MPFR.Я пишу программу на C и хотел бы сделать функцию, которая (например) принимает в качестве входных данных переменную mpfr_t и возвращает переменную mpfr_t.Я не уверен в определении mpfr_t, но я попытался наивно сделать это и получить ошибки компиляции.

Любая информация, касающаяся этого, будет высоко оценена.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

mpfr_t - это тип, и это непрозрачный тип, то есть вы не должны знать его определение.Вы должны иметь возможность просто определить функцию

mpfr_t f(mpfr_t x)
{
    // ...
}

, если все, что находится в ..., выполняет только допустимые операции (например, функции библиотеки MPFR) на x.

Еслиэто не работает, вы должны опубликовать ошибку, которую вы получаете.

0 голосов
/ 03 июня 2016

Тип в основном непрозрачный, но документация дает некоторую полезную информацию.

В частности, это массив [1] типа struct. Это говорит нам о том, что вам не нужно вызывать функцию выделения для ее создания. Создание переменной создает хранилище, и вы можете создавать автоматические или статические переменные и знать, где они живут.

Вам нужно необходимо вызвать функцию mpz_init(), чтобы инициализировать ее, но, будучи типом массива, она распадается на указатель в списке аргументов вызова функции. Это означает, что простая передача переменной (без &) означает, что функция может изменить это хранилище. Таким образом, важно (только) обратить внимание на объявления const в прототипах функций. Это один без const, который во всех случаях является пунктом назначения .

Наличие типа массива также означает, что вы не можете скопировать значение mpz_t с простым присваиванием, а скорее memcpy или подобное. Потому что вы не можете копировать массивы по присваиванию.

...