"overflow in expression" mit Konstanten

Gast #508863
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
Gast
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.
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.