igraph の作成者の 1 人として、これがプロジェクトの最初に下された疑わしい設計上の決定であることを認識しています。最初の意図は、実際には「抽象化のレイヤーを追加する」ことでした。アプリがint
どこでも使用される前に、科学的なソース コードを使用しており、オーバーフローの問題により、プログラムを機能させるためにソース コード全体ですべてをint
置き換える必要がありました。long
私たちが提示された問題で。そのためigraph_integer_t
、単純なint
orの代わりに、データ型が問題に対して小さすぎるlong
ことがわかった場合は、ソース コードの 1 か所だけを変更する必要があります。igraph_integer_t
振り返ってみると、上記のシナリオは非常にまれであるため、おそらくかなり弱い議論です。さらに複雑なことに、データ型がすべてのプラットフォームで十分でない場合を恐れて、igraph_integer_t
型定義されています。(私が今考えることができる 1 つのシナリオは、大きなグラフでモチーフを数えることです。モチーフの数は整数ですが、古いプラットフォームではデータ型の制限を簡単に超える可能性があります)。決定が下された当時はプロジェクトの周りにいなかったので、正確な理由ではないかもしれません. igraph-help メーリング リストでお気軽に質問してくださいdouble
long
long
igraph_integer_t
あなたが血みどろの詳細に興味があるなら。とにかく、私は igraph の C コアを直接よく使用します (私は Python ラッパーを担当しているため)、次igraph_integer_t
の 2 つの場合を除いて、他のデータ型との間でキャストする必要はないと安全に言えます。
igraph_integer_t
で値を使用する場合printf
。igraph_integer_t
aにキャストしてフォーマット文字列でlong
使用するか、キャストを%ld
行わずにフォーマット文字列で使用する必要があります (暗黙的に a に%g
依存します)。igraph_integer_t
double
を使用して配列にインデックスを付ける場合igraph_integer_t
。明らかにそれをにキャストする必要がありlong
ます。