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.
InformationsquelleAutor | 2015-03-30
Schreibe einen Kommentar