"overflow in expression" mit Konstanten

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

Antwort schreiben

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.

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.