Cast ssize_t oder size_t

7

In Quelldateien, die ich in meinem Projekt verwende, gibt es einen Vergleich zwischen ssize_t und size_t Variablen:

%Vor%

Ich möchte die Warnung loswerden:

%Vor%

Aber ich bin nicht sicher, welche Variable sollte ich in die andere werfen?

%Vor%

oder

%Vor%

Was ist sicherer, besser, sauberer? Danke

    
rluks 18.04.2013, 14:55
quelle

2 Antworten

16

Es gibt keine richtige Antwort auf diese Frage. Es gibt mehrere mögliche Antworten, je nachdem, was Sie a priori über die Werte wissen, die diese Variablen annehmen können.

  • Wenn Sie wissen, dass sst nicht negativ ist, können Sie sst sicher in size_t umwandeln, da dies den Wert nicht ändert (das passiert übrigens, wenn Sie keine Besetzung haben überhaupt).

  • Wenn sst möglicherweise negativ ist, aber Sie wissen, dass st niemals größer als SSIZE_MAX ist, können Sie st sicher in ssize_t umsetzen, da dies den Wert nicht ändert.

  • Wenn sst möglicherweise negativ ist und st möglicherweise größer als SSIZE_MAX ist, dann ist kein Cast korrekt. Entweder könnte man den Wert ändern, was zu einem falschen Vergleich führt. Stattdessen würden Sie das folgende if (sst >= 0 && (size_t)sst == st) machen.

Wenn Sie nicht absolut sicher sind, dass eine der ersten zwei Situationen zutrifft, wählen Sie die dritte Option, da sie in allen Fällen korrekt ist.

    
Stephen Canon 18.04.2013, 15:13
quelle
3

Beide funktionieren solange, wie beide Werte in den positiv darstellbaren Bereich von ssize_t passen.

Wenn einer der beiden Werte nicht ist, könnte dies zu Problemen führen - überprüfen Sie diese Fälle, bevor Sie auf Gleichheit prüfen:

%Vor%

(Ich bin mir sicher, dass die C ++ - Leute Ihnen empfehlen werden, die C-Style-Besetzung komplett zu vermeiden - ich habe keinen Zweifel, dass jemand kommentiert oder antwortet und Ihnen den richtigen Weg in C ++ erklärt.)

    
Carl Norum 18.04.2013 15:06
quelle

Tags und Links