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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.