Kryptische Zeile: unsigned h = 0, g;
-
Hallo,
versuche ein fremdes Stück Programm zu verstehen und finde in einer Hash-Funktion die kryptische Zeile: "unsigned h = 0, g;"
Kann mir jemand sagen von was für einem Typ h dann ist (char??, int?) und was das angehängte ", g" sein soll? g scheint hier nirgendwo definiert zu sein. Code kompiliert komischerweise trotzdem, ich möchte nur wissen was hier genau passiert...Danke schonmal.
static size_t vindex_hash(const vindex v) { int i; unsigned h = 0, g; for (i=v->n-1; i>=0; i--) { h = (h << 4) + v->e[i]; if ((g = h&0xf0000000)) { h = h ^ (g >> 24); h = h ^ g; }} return h; }
-
h dürfte (lt. rückgabewert) vom typ size_t sein.
und g ist einfach eine variable des gleichen typs wie h nur nicht initialisiert eben.
wird ja unten initialisiert...hth,
ciao
-
unsigned bedeutet vorzeichenlos, ich nehm an, dass damit ein int gemeint ist, probier einfach mal sizeof aus.
und das g ist eine stinknormale variable, die deklariert wird, genau so wie h, nur dass h gleich auch noch initialisiert wird.
edit: zu langsam ^^
-
Chr1stoph schrieb:
versuche ein fremdes Stück Programm zu verstehen und finde in einer Hash-Funktion die kryptische Zeile: "unsigned h = 0, g;"
Kann mir jemand sagen von was für einem Typ h dann ist (char??, int?) und was das angehängte ", g" sein soll? g scheint hier nirgendwo definiert zu sein. Code kompiliert komischerweise trotzdem, ich möchte nur wissen was hier genau passiert...An dem Code ist eigentlich nichts krypisch. "unsigned" bedeutet das gleiche wie "unsigned int", aber eigentlich schreibt jeder "unsigned", genau wie man normalerweise "long" schreibt, wenn man "long int" bzw. "signed long int" meint. h wird mit 0 vorbelegt, g bekommt zu diesem Zeitpunkt noch keinen Wert zugewiesen, das passiert erst im if. Du machst einfach zwei Variablen g und h vom Typ unsigned.
-
Leute, er rafft einfach nicht dass
unsigned h = 0, g;
das gleiche ist wie
unsigned int h; unsigned int g; h = 0;
das wärs.
-
toll, jetzt hätten wir ne 4. antwort
-
Dingo schrieb:
Leute, er rafft einfach nicht dass
unsigned h = 0, g;
das gleiche ist wie
unsigned int h; unsigned int g; h = 0;
Nun, rein technisch gesehen ist es das auch nicht. Beim ersten Code hast du eine Initialisierung, beim zweiten eine Zuweisung.
Das passende Äquivalent wäre demnachunsigned int h = 0; unsigned int g;
-
Yepp, verwirren wir ihn doch nochmal so richtig: Zeige mir ein strictly conforming C-Programm, bei dem es einen Unterschied macht, ob Dingos oder dein Code da steht. Wenn es ein solches Programm nicht gibt, dann kann der Compiler nämlich das eine für das andere einsetzen.