www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lokale Konstanten in C


Autor: Eugen Mailaender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Eugen Mailaender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rainer,

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

Gruesse
Eugen

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.