C: cast von int auf size_t
Was ist der richtige Weg, um zu konvertieren/umwandeln eines int
zu einem size_t
im C99-auf 32-bit und 64-bit-linux-Plattformen?
Beispiel:
int hash(void * key) {
//...
}
int main (int argc, char * argv[]) {
size_t size = 10;
void * items[size];
//...
void * key = ...;
//Is this the right way to convert the returned int from the hash function
//to a size_t?
size_t key_index = (size_t)hash(key) % size;
void * item = items[key_index];
}
Ich sehe nicht, warum es nicht funktionieren würde.
Was ist das problem mit einer normalen plain-cast
Ja, das ist richtig, aber ich denke, es ist implizit konvertiert werden, damit Sie nicht wirklich müssen die
Was ist das problem mit nicht Gießen?
Was ist das problem mit einer normalen plain-cast
(size_t)
? Ist es irgendwie nicht "richtig"?Ja, das ist richtig, aber ich denke, es ist implizit konvertiert werden, damit Sie nicht wirklich müssen die
(size_t)
.Was ist das problem mit nicht Gießen?
InformationsquelleAutor cpburnz | 2011-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle arithmetischen Typen konvertieren implizit in C. Es ist sehr selten, dass Sie brauchen eine Besetzung - in der Regel nur, wenn Sie konvertieren möchten, nach unten, reduziert modulo 1 plus der max-Wert der kleineren Art, oder wenn Sie brauchen, um zu erzwingen, Arithmetik in unsigned-Modus zu verwenden die Eigenschaften von unsigned-Arithmetik.
Persönlich, ich mag nicht sehen, wirft da:
Natürlich, wenn Sie Sie aktivieren einige ultra-pingelig Warnung Ebenen, Ihre implizite Konvertierungen verursachen möglicherweise viele Warnungen, auch wenn Sie korrekt sind...
InformationsquelleAutor R..
ist in Ordnung. Sie tatsächlich brauchen noch nicht einmal den cast:
nicht die gleiche Sache.
InformationsquelleAutor Stephen Canon
Abgesehen von den casting-Problem (was man nicht muss wie bereits erwähnt), es ist etwas mehr komplizierte Dinge, die möglicherweise schief gehen mit dem code.
wenn
hash()
soll return index in ein array, sollte es wieder einsize_t
als gut. Da es nicht, Sie könnten seltsame Effekte, wennkey_index
ist größer alsINT_MAX
.Ich würde sagen, dass
size
,hash()
,key_index
sollten alle vom gleichen Typ sein, wahrscheinlichsize_t
um sicher zu sein, zum Beispiel:INT_MAX
. Wenn Sie erhalten seltsame Effekte, es ist ein compiler-bug. Natürlich in dem gegebenen Beispiel10 < INT_MAX
so sollte es kein problem sein so oder so.InformationsquelleAutor Tim