C: Präprozessor ## mit variable

Gast #3794421
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
Gast #3794433
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
Gast #3794789
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?
#3794793
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren