In Quelldateien, die ich in meinem Projekt verwende, gibt es einen Vergleich zwischen ssize_t
und size_t
Variablen:
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
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.
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.)