2016-04-18 6 views
3

GLibのマクロドキュメント

g_array_append_val()

#define    g_array_append_val(a,v) 

アレイの端部上に値を追加します。必要に応じてアレイのサイズが自動的に拡大します。

g_array_append_val()は、値パラメータvへの参照を使用するマクロです。つまり、 "27"などのリテラル値では使用できません。変数を使用する必要があります。

パラメータ

aガライ

v値ガライ

に追加することは、このようなすべてのマクロ定義はかなり正しくないことは可能ですか? aポインタではありませんをGArrayに変換しますか?

+1

はい 'a'は' GArray'へのポインタです。ここでは「GArray」と呼ばれています。 –

+1

@MohitJain:...上記のドキュメンテーション*は間違っているとは言えないので、 "*' a '' GArray * '*"を読み込む必要があります。 – alk

+1

"* reference *"も不正確です。Cには "参照"がありません。 – alk

答えて

4

GArrayへのポインタをGArrayと呼んでいるように見えます。 (正確なIMOではない)。次の項目を見て例えば

g_array_append_vals()

GArray * 
g_array_append_vals (GArray *array, 
        gconstpointer data, 
        guint len); 

は、アレイの端にLEN要素を追加します。
配列ガライ
...
戻り
ガライ

パラメータは、ここでは、配列は明らかにGArrayへのポインタです。


ガライのオブジェクトを作成することができませんのでLPs' commentから、このための可能な理由は、おそらくです。 (私が正しく覚えていれば不透明なポインタです)、g_array_new()を呼び出して取得する新しい配列はGArray *です。

+2

私はそれが単に 'GArray'を定義することはできないという事実に依存していると思いますので、' g_array_new() 'で作成する必要があります。それから、すべての関数は 'GArray'ポインタが必要です。 – LPs

+1

ソースを見ると、 'g_array_new()'には構造体GRealArrayへのポインタが返される前に '(GArray *)'でキャストされているようです。したがって、GRealArrayの他のメンバーはアクセスできなくなります。 –

関連する問題