kein sizeof() in der if-Abfrage?
-
Hallo,
könnte mir jmd erklären, warum das nicht funktioniert? Wenn die if-Abfrage false ist, führt er die Anweisung trotzdem aus.
char cc[10] = {0}; if(2 - sizeof(cc) >= 0) // müsste ja 2 - 10, d.h. -8 >= 0, also false sein. Er geht trotzdem rein int fsf = 0;Danke!
-
Welcher Compiler? Alle Warnungen angeschaltet? Warnung beachtet?
-
Bei mir funktioniert es korrekt.
-
Dein
int fsf = 0;tut nichts. Woher weißt Du, daß "er" das trotzdem ausführt?
-
Der Typ des Ausdrucks "2 - sizeof(bar)" ist unsigned int, daher verhält sich das anders als du erwartest. http://ideone.com/ki30d
-
Das Verhalten ist schon korrekt so - unsigned int hat bei den üblichen arithmetischen Umwandlungen einen höheren Rang als int.
Glücklicherweise gibt es eine einfache Lösung dafür:
if(2 >= sizeof(cc)) { ... }
-
super
vielen dank euchaber irgendwie versteh ich das nur so halb mit dem unsigned und signed int warum das andere nicht funktioniert.
ist 2 unsigned? *frag doof*beide werte sind doch im plusbereich...
Wäre super, wenn jmd mir das nochmal kurz erklären könnte.
P.S. MIt einem Debugger kann man gut sehen, ob die Anweisung ausgeführt wird.
Die Anweisung int fsf = 0; ist natürlich nur hier zur Anschauung und Verkürzung meiner eigentlicher Anweisung
-
Lies das:
http://msdn.microsoft.com/en-us/library/3t4w2bkb.aspx
grundsätzlich ist, wenn zwei Integer miteinander verrechnet werden und einer davon unsigned ist (wie sizeof(cc)), das Ergebnis der Berechnung ebenfalls unsigned und kann deshalb nicht kleiner als Null werden. Gerechnet wird dann Modulo 2^Breite des Ergebnistyps^.
-
Der Ausdruck '2' dürfte erst mal den Typ int haben. Aber der Ausdruck sizeof(x) hat den Typ size_t, und der ist unsigned. Und wenn ein signed und ein unsigned Typ miteinander Arithmetik betreiben wollen, müssen sie sich auf eins einigen. Und das ist unsigned. http://ideone.com/DAPpX
-
seldon schrieb:
Lies das:
http://msdn.microsoft.com/en-us/library/3t4w2bkb.aspx
grundsätzlich ist, wenn zwei Integer miteinander verrechnet werden und einer davon unsigned ist (wie sizeof(cc)), das Ergebnis der Berechnung ebenfalls unsigned und kann deshalb nicht kleiner als Null werden. Gerechnet wird dann Modulo 2^Breite des Ergebnistyps^.
klasse
vielen dank
