Heim > Artikel > Backend-Entwicklung > Warum erhalte ich in C die Warnung „Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken'?
Warnung: Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken
Einführung
Während der Arbeit an der Übung 2-3 von „Accelerated C“ stieß ein Benutzer auf eine Compiler-Warnung: „Vergleich zwischen signiert und vorzeichenlose Ganzzahlausdrücke. Dieses Problem tritt auf, wenn vorzeichenbehaftete Ganzzahlen (int) mit string::size_type verglichen werden, einem Datentyp, der häufig für Zeichenfolgenlängen verwendet wird.
Ursache der Warnung
Die Warnung tritt auf weil vorzeichenbehaftete und vorzeichenlose Ganzzahltypen unterschiedliche Bereiche haben. Beim Vergleich dieser Typen kann das Ergebnis unerwartet sein. Compiler geben diese Warnung aus, um Programmierer auf die Möglichkeit verwirrender Ergebnisse aufmerksam zu machen.
Empfohlene Vorgehensweise
Um dieses Problem zu vermeiden, ist es ratsam, explizit anzugeben, ob ganze Zahlen vorzeichenbehaftet sind oder ohne Vorzeichen. Wenn Sie Ganzzahlen mit Zeichenfolgenlängen oder anderen vorzeichenlosen Werten vergleichen, deklarieren Sie die Ganzzahlen als unsigned int oder size_t, damit sie dem zu vergleichenden Datentyp entsprechen. Dadurch wird sichergestellt, dass der Vergleich die beabsichtigten Ergebnisse liefert.
Beispielcode
Im bereitgestellten Code sollte padtopbottom als unsigned int deklariert werden, um mit der Variablen string::size_type übereinzustimmen c:
unsigned int padtopbottom; cin >> padtopbottom; unsigned int padsides; cin >> padsides; if (r == padtopbottom + 1 && c == padsides + 1) { // ... }
Zusätzlich Hinweise
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in C die Warnung „Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!