Forum: Compiler & IDEs C: Präprozessor ## mit variable


von preAVR (Gast)


Lesenswert?

Hi,

ich will Timer-Methoden erstelln. Aber wenn man das schreibt:

#define CAT_3_(x, y, z) x ## y ## z
#define CAT_3(x, y, z) CAT_3_(x, y, z)

und dann im Code so was:

void timer_init(int timernum, uint8_t time) {
        //...
        CAT_3(TCCR, timernum, A) = 0x00; //oder so, nur ein Beispiel
        //...
}

bekomme ich einen Error: Symbol 'TCCRtimernumA' could not be resolved
Wahrscheinlich wird nur der name, nicht der inhalt der variable 
genoomen. Kann man da ändern?
Danke

von Yalu X. (yalu) (Moderator)


Lesenswert?

Der Präprozessor kennt keine Variableninhalte.

Du könntest allenfalls auch timer_init als Makro definieren, so dass aus
timernum ein Präprozessorsymbol wird.

von preAVR (Gast)


Lesenswert?

[gelöscht durch Mod]

Yalu X. schrieb:
> Der Präprozessor kennt keine Variableninhalte.

Hatte ich befürchtet.... Schade

> Du könntest allenfalls auch timer_init als Makro definieren, so dass aus
> timernum ein Präprozessorsymbol wird.

Danke, für den Tipp, ich schau mal ob sich das umsetzen lässt

: Bearbeitet durch Moderator
von preAVR (Gast)


Lesenswert?

@mod
Schön dass der Post schon gelöscht wurde. kann dann vllt auch mein Post 
so editiert werden, dass das Zitat verschwindet?

von Rolf M. (rmagnus)


Lesenswert?

preAVR schrieb:
> Yalu X. schrieb:
>> Der Präprozessor kennt keine Variableninhalte.
>
> Hatte ich befürchtet.... Schade

Wie soll er auch? Er wird zur Compilezeit noch vor dem eigentlichen 
Compiler aufgerufen. Daß es die Variable gibt weiß er gar nicht, 
geschweige denn, was sie später beim Ausführen des Programms dann 
enthalten wird.

von J. (Gast)


Lesenswert?

Solche Spielchen sind eher nicht empfehlenswert, sie verschlechtern nur 
die Lesbarkeit.

von preAVR (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Wie soll er auch? Er wird zur Compilezeit noch vor dem eigentlichen
> Compiler aufgerufen. Daß es die Variable gibt weiß er gar nicht,
> geschweige denn, was sie später beim Ausführen des Programms dann
> enthalten wird.

Ja, okay, ich hatte vergessen zu erwähnen, dass es eine const-Varible 
ist, die der Konstruktor definiert.
Aber das ändert ja auch nichts, wenn ich mich nicht irre?

von Rolf M. (rmagnus)


Lesenswert?

preAVR schrieb:
> Ja, okay, ich hatte vergessen zu erwähnen, dass es eine const-Varible
> ist, die der Konstruktor definiert.
> Aber das ändert ja auch nichts, wenn ich mich nicht irre?

Richtig. Der Präprozessor wertet Variablendefinitionen gar nicht aus. 
Sieh ihn als eine Art simplen Texteditor, für den du die Anweisungen im 
zu bearbeitenden Text selbst hinterläßt. Was dieser Text bedeutet 
(abgesehen von den Präprozessor-Anweisungen), ist dem Präprozessor nicht 
bekannt.

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.