2016-04-18 4 views
3

Von here:GLib Makro Dokumentation

g_array_append_val()

#define    g_array_append_val(a,v) 

fügt den Wert bis zum Ende des Arrays. Das Array wird bei Bedarf automatisch vergrößert.

g_array_append_val() ist ein Makro, das einen Verweis auf den Wertparameter v verwendet. Dies bedeutet, dass Sie es nicht mit Literalwerten wie "27" verwenden können. Sie müssen Variablen verwenden.

Parameter

a ein garray

v der Wert auf den garray

Ist es möglich, anzufügen, dass alle Makrodefinitionen wie diese sind nicht ganz richtig? Ist nicht a ein Zeiger zu einem GArray?

+1

Ja 'a' ist ein Zeiger auf' GArray'. Was hier als GArray bezeichnet wird. –

+1

@MohitJain: ... dann ist die obige * Dokumentation * ungenau, um nicht falsch zu sagen, da sie dann "*' a' a 'GArray *' * "lesen sollte. – alk

+1

"* reference *" ist auch ungenau, da es keine "Referenzen" in C. – alk

Antwort

4

Es scheint die Terminologie des Dokuments ist Zeiger auf GArray als GArray aufrufen. (Was nicht genau IMO ist).

Zum Beispiel sucht beim nächsten Artikel:

g_array_append_vals()

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

Fügt Elemente an das Ende des Arrays len.

Parameter
Array ein garray
...
Returns
die garray

Hier Array eindeutig ein Zeiger auf GArray ist.


Von LPs' comment der mögliche Grund dafür ist möglicherweise, weil Objekte von garray kann nicht erstellt werden. (Es ist ein undurchsichtiger Zeiger, wenn ich mich richtig erinnere) und das neue Array, das Sie erhalten, indem Sie g_array_new() aufrufen, hat den Typ GArray *.

+2

Ich denke, es hängt davon ab, dass man nicht einfach ein 'GArray' definieren kann, man muss es mit' g_array_new() 'erstellen. Dann brauchen alle Funktionen einen "GArray" -Zeiger. – LPs

+1

Aus dem Blick auf die Quelle scheint es, dass in 'g_array_new()' ein Zeiger auf eine Struktur 'GRealArray' mit' (GArray *) 'vor der Rückgabe geworfen wird. Das macht die anderen Mitglieder von 'GRealArray' unzugänglich. –