Forum: Mikrocontroller und Digitale Elektronik Cast von Konstanten bei Vergleichen


von seeTronic (Gast)


Lesenswert?

Hallo,

ich benutze Keil 5 für einen STM32F1XX
es existiert offensichtlich ein Unterschied zwischen:
1
 if(gu32_Timer      <   4000000000) gu32_Timer++;

und dem explizit gecasteten Code:
1
 if(gu32_Timer      <   (uint32_t) 4000000000) gu32_Timer++;

die Variable gu32_Timer ist vom Typ uint32_t.
Ich hätte gedacht, dass automatisch auf den linken Datentyp gecastet 
wird?
Der sich ergebende Maschinencode ist jedoch von unterschiedlicher Größe.

Vielen Dank!

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

seeTronic schrieb:
> Ich hätte gedacht, dass automatisch auf den linken Datentyp gecastet
> wird?

Es gilt int Promotion und nicht uint!
Eine Konstante sollte immer type korrekt sein, also besser

if(gu32_Timer < 4000000000UL) gu32_Timer++;

von Nick M. (Gast)


Lesenswert?

Du solltest 4000000000UL schreiben. Dann weiß der Compiler was du dir 
denkst.

Mist, zu spät!

von seeTronic (Gast)


Lesenswert?

Dankeschön.

Das hilft mir schon mal sehr!
:-)

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.