hallo forum, ich hab eine kleinigkeit. mein compiler wirft eine warnung die folgerndermaßen aussieht: > ../function_generator.c:1160: warning: integer overflow in expression der code dazu: > if(ptr_ch_1 >= (ARRAY_LENGTH * STRETCH_VALUE) ) > ptr_ch_1 -= ARRAY_LENGTH * STRETCH_VALUE; wobei ptr_ch_1 ein unsigned integer ist und ARRAY_LENGTH und STRETCH_VALUE per define vereinbart sind: > #define ARRAY_LENGTH 10240 > #define STRETCH_VALUE 4 nun ist 10240 * 4 = 40960 !E von integer, soviel ist klar. aber da es ein unsigned typ ist, ist es E von unsigned integer. weiss das der compiler nicht wenn er die warnung wirft (also nimmt er signed integer an) oder woran stößt er sich? pumpkin
hallo,
die defines werden ja einfach so ersetzt. ergo würde ich, wenn ich der
compiler wäre, dass dann so schreiben:
>if(ptr_ch_1 >= (10240 * 4) )
usw.
also sind's konstanten und lt. k&r vom typ int.
schreib mal am ende der macro's ein 'u', dann sollten sie als unsigned
behandelt werden.
bye kosmo
Der Ausdruck (ARRAY_LENGTH * STRETCH_VALUE) ist vom Typ "int". Was drum herum steht interessiert des Compiler bis dahin nicht. Erst das Ergebnis diser Rechnung wird in "unsigned" umgewandelt, aber dann ist es bereits zu spät.
ok, das macht sinn. dachte es bezieht sich auf die zuweisung. K&R hab ich leider nicht zur verfügung, ist langsam mal ne überlegung wert. danke pumpkin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.