mikrocontroller.net

Forum: Compiler & IDEs "overflow in expression" mit Konstanten


Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Joe Die (kosmonaut_pirx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.