mikrocontroller.net

Forum: Compiler & IDEs Redefine Konstante


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

kann ich eine Konstante, die mit

#define xxx 1100

definiert ist, auch innerhalb einer Funktion mit

#define xxx 200

wieder beliebig umdefinieren. Der Compiler bringt nur ein Warning, aber 
gibt das Probleme im Programmablauf ?

Autor: R. Fischer (firo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, da es sich nicht um eine Konstante sondern eine 
Präprozessoranweisung handelt, wird auch genau das geschehen:
Überall wo das Symbol 'xxx' auftaucht wird er es mit '1100' oder '200' 
ersetzen - das musst Du testen.

Innerhalb der Funktion heißt also ab dort kann es passieren, dass 
überall 'xxx' durch '200' ersetzt wird.

-> Es ist also von so einem Vorgehen abzuraten, weil je nach Position 
immer wieder neue "Effekte" entstehen können.

Und noch was ganz kleinkariertes: Konstanten sind konstant und werden 
nicht geändert (daher macht man sie ja konstant)!

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und noch was ganz kleinkariertes: Konstanten sind konstant und werden
>nicht geändert (daher macht man sie ja konstant)!

Jo, keine Sorge, so eine Frage bzw. Fragestellung schreit gerade zu nach 
kleinkarierten Antworten, das verkrafte ich schon ;-)

Da innerhalb eines Initialisierungsvorganges eine 
"_Präprozessoranweisung" nur  einmal für nur die eine Funktion geändert 
werden muss und nach dem diese Funktion durchlaufen ist (Code garantiert 
für nur einmaligen Durchlauf) die "_Präprozessoranweisung" wieder auf 
den ursprünglichen Wert zurückdefiniert wird, müsste ich also keine 
Probleme bekommen.

Autor: R. Fischer (firo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, aber bleibt die Frage, warum der nicht ein
#define yyy 200
kriegt?
(Denn der Präprozessor macht nichts anderes als "Suchen und ersetzen", 
denn der Compiler kriegt das 'xxx' und 'yyy' nicht zu sehen)

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unabhängig von den Argumenten, die gegen das lokale Umdefinieren einer 
Präprozessor-Definition sprechen - es handelt sich mitnichten um eine 
Konstante! - kann man die Warnung folgendermaßen wegkriegen:

#define xxx 1100

...

#undef xxx
#define xxx 200

Das xxx für eine Funktion umzudefinieren ist allerdings deswegen keine 
sonderlich gute Idee, weil der Präprozessor keine Ahnung von C-Scopes 
hat; man muß also die ursprüngliche Definition hinterher selbst 
wiederherstellen.

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.