Wie kann ich das beheben Fehler code C4146 “unäre minus-operator angewendet vorzeichenlosen Typ.Ergebnis noch unsigned"?
Daten Typ int
's minimum-Wert liegt zwischen-2.147.483.648.
So, ich tippte
int val = -2147483648;
Aber es hat einen Fehler:
unary minus operator applied to unsigned type.result still unsigned
Wie kann ich es beheben?
- stackoverflow.com/questions/14695118/...
- Eine Möglichkeit dieses Problem zu beheben ist, um sich selbst eine standard-konforme compiler. Ernst. Seit 1999 C auferlegt, die, dezimale Konstanten sind immer
signed
Arten. Also dein Fehler ist ein Fehler von dem compiler. - Gustedt: Das ist wahr, aber es ist nicht notwendig, eine non-conformance-Problem in diesem Fall. In C99 und später das Verhalten ist undefiniert, wenn es kein vorzeichenbehaftete integer-Typ, der breit genug zur Darstellung der Konstanten. Das "deckt" die C89/90 Verhalten als gut: mit unsigned-Typ ist nichts anderes als nur eine Besondere Erscheinungsform des undefinierten Verhalten. Es kann auch gesehen werden als eine compiler-spezifische Erweiterung, definiert, undefiniert.
- es ist ein conformance-Problem. Für C99, es ist immer ein integer-Typ, der ist mindestens 64 bit breit, so dass die Konstante hier ist immer eine gültige integer-Konstante.
Du musst angemeldet sein, um einen Kommentar abzugeben.
2147483648
ist ausint
Angebot auf Ihrer Plattform.Entweder einen Typ mit mehr Präzision zur Darstellung der Konstante
(je nachdem, welcher Typ hat mehr Präzision als
int
auf Ihrer Plattform).Oder greifen auf die gute alte
- 1
trickINT_MIN
makro auslimits.h
wenn das Ziel ist, erhalten Sie die niedrigsten möglichen integer-Wert-1
trick ist gut, denn es löst weniger compiler-Warnungen, je nach compiler-und build-Einstellungen.-2,147,483,648
interpretiert wird, als negation der2147483648
.2147483648
überschreiten die maximale positive ganze Zahl, die auf Ihrem system und wird als unsigned.Versuchen Sie stattdessen,