Forum: Mikrocontroller und Digitale Elektronik Lokale Konstanten in C


von Eugen Mailaender (Gast)


Lesenswert?

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

von Rainer (Gast)


Lesenswert?

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.

von Eugen Mailaender (Gast)


Lesenswert?

Hallo Rainer,

vielen Dank fuer deinen Tip,
BYTE const offset_x=10;
gefaellt mir besser.

Gruesse
Eugen

von Peter D. (peda)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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