makefile soll ausdruck ersetzen

OP #606120
Lesenswert?
• ▲
▼
Hallo,
habe da ein Problem:
Habeim makefile (AVR-GCC) die Zeile eingefügt:
MCU=atmega16

Im Sourcecode benutze ich dann folgendes:
uint8_t s[280] = {"\n\rProzessor: " MCU "\n\r"};

nun kommt beim compilieren immer die Fehlermeldung:
error: expected '}' before 'atmega16'

d.h. MCU wird richtig ersetzt, aber warum kommt immer diese 
Fehlermeldung
bzw. wie kann ich es richtig machen?
Gast #606128
Lesenswert?
• ▲
▼
@ Elektro Gandalf (e_g)

>uint8_t s[280] = {"\n\rProzessor: " MCU "\n\r"};

>nun kommt beim compilieren immer die Fehlermeldung:
>error: expected '}' before 'atmega16'

>d.h. MCU wird richtig ersetzt, aber warum kommt immer diese
>Fehlermeldung
>bzw. wie kann ich es richtig machen?

Ich denke es fehlen zwei Gänsefüsschen.
Etwa so

uint8_t s[280] = {"\n\rProzessor: " "_MCU_" "\n\r"};

Denn ohne würde MCU duch mega16 erstzt, was dann so aussieht

uint8_t s[280] = {"\n\rProzessor: " mega16 "\n\r"};

Das ist aber kein String sondern illegal. So wäre es ein String

uint8_t s[280] = {"\n\rProzessor: " "mega16" "\n\r"};

MfG
Falk
#606133
Lesenswert?
• ▲
▼
>
> d.h. MCU wird richtig ersetzt, aber warum kommt immer diese
> Fehlermeldung

Weil nach der Ersetzung da steht

uint8_t s[280] = {"\n\rProzessor: " atmega16 "\n\r"};


> bzw. wie kann ich es richtig machen?

Du suchst nach dem 'Stringizer' des Präprozessors

Ohne das jetzt konkret probiert zu haben, muesst das
so gehen
1
#define STR(s) #s
2
uint8_t s[280] = {"\n\rProzessor: " STR(_MCU_) "\n\r"};
#606151
Lesenswert?
• ▲
▼
Elektro Gandalf wrote:
> @  Karl heinz Buchegger:
>
> funktioniert leider auch nicht, dann steht auch wieder MCU drinnen

Das ist das Problem mit diesen # und ## Operatoren.
Probiers mal mit einer Makro-Ebene mehr:
1
#define STR2(x) #x
2
#define STR(s) STR2(s)
3
uint8_t s[280] = {"\n\rProzessor: " STR(_MCU_) "\n\r"};

(Nicht lachen: Warum das so ist, kann dir kein Mensch
mit vernüftigen Argumenten erklären. Es hat was mit der
unintuitiven Auswertereihenfolge in Makros zu tun)

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.