Forum: Mikrocontroller und Digitale Elektronik XC8: Wertebereich von int-Konstanten ?


von Mike (Gast)


Lesenswert?

Warum gibt mir der XC8-Compiler bei
1
    int i;
2
    i = -32768;
die Warnung "arithmetic overflow in constant expression" aus, während
1
    i = -32767;
2
    i--;
problemlos funktioniert und i anschließend auch den richtigen Wert 
-32768 enthält.
Haben Konstanten und Variablen in C andere Wertebereiche? Oder ist das 
ein Compiler-Bug?

von Frank K. (fchk)


Lesenswert?

Microchip hat eigene Foren. Schreib das da rein und eröffne einen 
Bugreport.

fchk

von zitter_ned_aso (Gast)


Lesenswert?

in limits.h gibt es Werte  INT_MIN / INT_MAX. Dort kannst du sehen 
welchen Zahlenbereich int-Werte umfassen.

von Mike (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> in limits.h gibt es Werte  INT_MIN / INT_MAX.

Danke für den Tipp. In limits.h steht:
1
#define  INT_MAX    32767      /* max value of an int */
2
#define  INT_MIN    (int)-32768    /* min value of an int */

Auffällig ist der cast nach int. Das Statement
1
i = INT_MIN;
 führt aber ebenfalls zu einer Warnung.

von zitter_ned_aso (Gast)


Lesenswert?

Dann probiere halt mit i=INT_MIN statt i=-32768. Ist auch sicherer.

von zitter_ned_aso (Gast)


Lesenswert?

Mike schrieb:
> i = INT_MIN; führt aber ebenfalls zu einer Warnung.

Ach so, du hast es schon getestet.

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
Noch kein Account? Hier anmelden.