GMP と MPFR を使い始めたばかりです。私は C でプログラムを書いており、(たとえば) 入力として mpfr_t 変数を取り、mpfr_t 変数を返す関数を作成したいと考えています。mpfr_t の定義はよくわかりませんが、単純にこれを実行してコンパイル エラーが発生しました。
これに関する情報は大歓迎です。
mpfr_t
は型であり、不透明な型です。つまり、その定義を知っている必要はありません。関数を定義するだけでよいはずです
mpfr_t f(mpfr_t x)
{
// ...
}
...
にあるものだけが有効な操作 (MPFR ライブラリ関数など) を実行する限りx
。
それでもうまくいかない場合は、発生しているエラーを投稿する必要があります。
型はほとんど不透明ですが、ドキュメントはいくつかの有用な情報を提供します。
特に、それは型の配列[1]
ですstruct
。これは、作成するために割り当て関数を呼び出す必要がないことを示しています。変数を作成するとストレージが作成され、自動変数または静的変数を作成でき、それらがどこにあるかがわかります。
関数を呼び出して初期化する必要がありますが、mpz_init()
配列型であるため、関数呼び出しの引数リスト内のポインターに減衰します。つまり、単純に変数を ( なしで&
) 渡すということは、関数がそのストレージを変更できることを意味します。const
したがって、関数プロトタイプの宣言に注意を払うことが (唯一) 重要です。いずれの場合も、 のないものconst
が宛先です。
配列型であることはmpz_t
、単純な代入では値をコピーできないことも意味しますが、むしろmemcpy
または同様です。割り当てによって配列をコピーすることはできないためです。