Lokale Konstanten in C

Gast #55161
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
Gast
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.
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.