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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.