Hallo alle miteinander, da Ihr mir bereits einmal weitergeholfen habt, versuche ich es jetzt ein weiteres mal. Ich moechte in C (Keil-Compiler) in versxchiedenen Funktionen lokale Konstanten definieren, welche denselben Namen haben. Dies geht mit #define xxx aber nicht. Weiss jemand einen anderen Weg um dies zu erreichen. Anbei ein kurzes Beispiel: #include <REG51CC01.H> #include <stdio.h> void func1(void) { #define OFFSET_X 20 char x; x = OFFSET_X; // ..... } void func2(void) { #define OFFSET_X 30 char x; x = OFFSET_X; // ..... } void main(void) { func1(); func2(); } Besten Dank im Voraus und Gruesse Eugen
Entweder: #define OFFSET_X 20 #undef OFFSET_X #define OFFSET_X 10 oder, besser: BYTE const offset_x=10; als lokale Variable in der Funktion. Rainer.
Hallo Rainer, vielen Dank fuer deinen Tip, BYTE const offset_x=10; gefaellt mir besser. Gruesse Eugen
BYTE const offset_x=10; sollte man auf MCs besser nicht verwenden. Es erzeugt nämlich eine richtige Variable, d.h. es belegt kostbaren Speicherplatz und auch Code, um den Wert zuzuweisen. #define wird dagegen schon zur Compilezeit aufgelöst, belegt daher keinerlei Ressourcen. Und wenn es sich um verschiedene Werte handelt, dann sollte man sie auch besser verschieden nennen. Ansonsten ergibt sowas bei größeren Programmen schnell mal einen Fehler. Z.B.: #define OFFSET_X_1 20 #define OFFSET_X_2 30 Peter
sehe ich auch so. Da Konstanten nun mal Konstanten sind und die entsprechende Anzahl Bytes im Programmspeicher so oder belegen, macht es wirklich keinen Sinn, global und lokal verschiedene Werte für denselben Namen zu benutzen. Lokale Variable benutzt man letztendlich auch nur, um durch overlay RAM zu sparen bzw. nach Möglichkeit während der Routine die Variablen in Registern zu halten. Gleiche Namen vermeide ich da eigentlich auch, von "loop" mal abgesehen. Wenn 2 Sachen verschiedene Aufgaben haben, warum sollten sie dann den gleichen Namen benutzen?
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.