Die Warnung “Diese Dezimalkonstante ist nur in ISO C90 vorzeichenlos” kann nicht entfernt werden

Lesezeit: 1 Minute

Benutzer-Avatar
rfgamaral

Ich verwende den FNV-Hash als Hash-Algorithmus für meine Hash-Tabellenimplementierung, erhalte jedoch die Warnung im Fragentitel in dieser Zeile:

unsigned hash = 2166136261;

Ich verstehe nicht, warum das passiert, denn wenn ich das tue:

printf("%u\n", UINT_MAX);
printf("2166136261\n");

Ich bekomme das:

4294967295
2166136261

Das scheint unter den Grenzen meiner Maschine zu liegen …

Warum erhalte ich die Warnung und welche Möglichkeiten habe ich, sie zu beseitigen?

unsigned hash = 2166136261u; // note the u.

Du brauchst ein Suffix u um dies anzuzeigen, ist dies eine vorzeichenlose Zahl. Ohne das u Suffix wird es eine signierte Nummer sein. Seit

2166136261 > 2³¹ - 1 = INT_MAX,

Dieses Integer-Literal wird problematisch sein.

  • Ich gehe davon aus, dass dies keine Auswirkungen auf den FNV-Hashing-Algorithmus hat und dass er immer so funktioniert, wie er sollte?

    – rfgamaral

    27. Februar 2010 um 16:23 Uhr

  • Beachten Sie, dass der Code wohldefiniert ist und mit allen Versionen des C-Standards übereinstimmt – das Suffix wird nur “benötigt”, um eine Warnung stumm zu schalten, die in diesem Fall falsch ist.

    – MM

    10. Januar 2017 um 1:30 Uhr

1371150cookie-checkDie Warnung “Diese Dezimalkonstante ist nur in ISO C90 vorzeichenlos” kann nicht entfernt werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy