2017-10-01 6 views
0

Ich arbeite mit einer C-Codebasis, die eine API-Funktion (https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-size) verwendet, die eine Guint zurückgibt. Ich musste dies als ein int stromabwärts weiterleiten. Ich frage mich, ob es irgendeinen Weg gibt, dies zu tun?Typumwandlung zwischen Glib-Typen (z. B. Guint) in Standard-C-Datentypen (z. B. Int)

Ich suchte die Dokumente und Google, aber kam leer.

+0

Mögliches Duplikat von [Konvertieren eines Array von Zeichen in ein const gchar \ *] (https://stackoverflow.com/questions/2800310/converting-an-array-of-characters-to-a-const-gchar) – ptomato

Antwort

1

Die bloße Existenz dieser Typdefs verblüfft mich. Prüfen glib/gtypes.h:

typedef char gchar; 
typedef short gshort; 
typedef long glong; 
typedef int gint; 
typedef gint gboolean; 

typedef unsigned char guchar; 
typedef unsigned short gushort; 
typedef unsigned long gulong; 
typedef unsigned int guint; 

So ist keine Konvertierung erforderlich zwischen unsigned int und guint, sie sind vom gleichen Typ.

Die üblichen Warnungen zur Konvertierung zwischen unsigned int und int gelten.

+1

https://stackoverflow.com/questions/1819561/why-does-glib-redefine-types?rq=1#comment1709760_1819582 ist die am wahrscheinlichsten klingende Vermutung, die ich gesehen habe, warum dies – ptomato

+1

https: // stackoverflow ist .com/questions/1819561/why-does-glib-redefinieren-types? rq = 1 # comment1709760_1819582 ist keine Vermutung, es ist eine korrekte Tatsache. –

+1

Dieser andere Artikel von SO könnte eine Erklärung für die Existenz von 'gint32' und ähnlichem sein; aber soweit ich sagen kann, ist 'gint' ein plattformdefiniertes' int' auf allen Plattformen; ähnlich andere Typen ohne spezifische Größen. Zu welchem ​​Zweck dienen sie? Die Existenz von 'Gint',' Gchar' usw. erschien mir immer als Affekt. –

Verwandte Themen