Hallo. ich hab nen PIC18F4585 und programmier ihn mit C18 Compiler. Es tritt bei mir ein seltsames Problem mit dem "<" Operator auf. In der nicht-auskommentierten Version des untenstehenden Codes springt mein controller nicht in den körper der if-anweisung. wohingegen es mit dem gleichheitsoperator funktioniert. hat jemand eine idee? #define RPM_LEVEL1 = 10000 void main (void) { ... //unsigned int rpm = 10000; // funktionierende Version unsigned int rpm = 9000; // nicht-funktionierende Version setRPM(rpm); ... } void setRPM(unsigned int rpm) { //if(rpm==RPM_LEVEL1) // funktionierende Version if(rpm<RPM_LEVEL1) // nicht-funktionierende Version { ... } }
Genaugenommen:
1 | #define RPM_LEVEL1 = 10000
|
ist falsch, da gehört kein Gleichheitszeichen hin. Klammern, wie von Klaus vorgeschlagen, sind bei einem so primitiven Ausdruck nicht nötig. Bedenke übrigens, daß solche Präprozessorkonstanten als int-Werte betrachtet werden; möchtest Du also einen Wert > 32767 deklarieren, so musst Du das Suffix U an die Konstante anhängen (um "unsigned int" zu spezifizieren). Soll der Wert größer als 65535U werden, ist noch das Suffix L zu verwenden:
1 | #define ZIEMLICH_VIEL 12345678UL
|
> Bedenke übrigens, daß solche Präprozessorkonstanten als int-Werte > betrachtet werden Nein. Sie sind exakt wie ganz normalen Zahlen im Code. Lexikalische Ersetzung. > Soll der Wert größer als 65535U werden, ist noch das Suffix L zu > verwenden: Unnötig. Soviel eigene Intelligenz darfst du dem Compiler durchaus zumuten. Erst bei den "long long" Varianten weist GCC vorsorglich darauf hin.
hallo. das "=" im #define war nur ein tipfehler hier im forum. die zahlen sind kleiner als 13000.
Eben. Und "ganz normale Zahlen im Code" ohne spezifische Suffixe sind ints.
> Und "ganz normale Zahlen im Code" ohne spezifische Suffixe sind ints.
Nein. Sie sind das, was für die korrekte Darstellung mindestens
erforderlich ist, mindestens aber "int".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.