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

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