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
@ 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
Versuchs mit
uint8_t s[280] = {"\n\rProzessor: " #_MCU_ "\n\r"};
Der # Operator sollte Anführungszeichen um MCU geben.
Klaus
@Falk: Hi, habe ich mir auch schon gedacht, dann wird es aber nicht mehr ersetzt ;-(
@klaus Falser: dann kommt folgendes: error: stray '#' in program error: expected '}' before 'atmega16'
> > 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 | |
2 | |
Kommando zurück: Der # Operator funktioniert nur in Macros. Entschuldigung, Klaus
@ Karl heinz Buchegger: funktioniert leider auch nicht, dann steht auch wieder MCU drinnen
OK. mit dem gehts:
#define STR_(a) #a
#define STR(a) STR_(a)
uint8_t s[280] = {"\n\rProzessor: " STR(MCU) "\n\r"};
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 | |
2 | |
3 | |
(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)