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 ?
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)!
>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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.