Nein, der Präprozessor berechnet keine Ausdrücke. Der Compiler macht das, aber selbstverständlich verändert er bei dem Ersetzen durch eine Konstante den Typ nicht. Und da sizeof einen unsigned Rückgabe-Typ hat, ist auch das Ergebnis der Division (und damit die rechte Seite des Vergleichs) ein unsigned Typ. Es ist völlig unerheblich, ob diese Division nun tatsächlich zur Laufzeit stattfindet, oder ob der Compiler dort direkt eine Konstante verwendet. Der Typ ist in beiden Fällen der gleiche.kann der Preprozessor doch vorausberechnen und entsprechend eine Konstante einsetzen, in diesem Falle die 3
In dem Fall hat die 3 aber auch einen signed Typ.Wenn ich das selbst direkt im Programcode mache geht es auch einwandfrei.
So kann man das auch wieder nicht verallgemeinern. Die Größe der Typen spielt auch noch eine Rolle. In diesem Fall würde der Vergleich zum Beispiel funktionieren:Das heisst für mich soviel, daß man keinen signed mit einem unsigned korrekt vergleichen kann ohne explizite Typwandlung....
signed long a = -1;
unsigned int b = 3;
if (a < b) ...
Lesezeichen