Forum: Compiler & IDEs Redefine Konstante


von Matthias (Gast)


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 ?

von R. F. (firo)


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)!

von Matthias (Gast)


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.

von R. F. (firo)


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)

von Uhu U. (uhu)


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.

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.