COMMAND_SET_VALUE schrieb:
> Hallo zusammen,
>
> kann man den "Glue" Operator (##) auch auf Strings anwenden?
Du brauchst ihn eigentlich gar nicht.
Denn eine Abfolge von Strings muss vom Compiler sowieso zu einem
einzigen String zusammengezogen werden.
Also einfach
1 | #define PREFIX "Sx_"
|
2 | #define COMMAND_ON "ON"
|
3 | #define COMMAND_OFF "OFF"
|
4 | #define COMMAND_SET_VALUE "SET"
|
5 | #define POSTFIX "_xE"
|
6 |
|
7 | #define CMD_POWER_ON PREFIX COMMAND_ON POSTFIX
|
8 | #define CMD_POWER_OFF PREFIX COMMAND_OFF POSTFIX
|
9 | #define CMD_SET_VALUE(value) PREFIX COMMAND_SET_VALUE value POSTFIX
|
CMD_POWER_ON ist für den Compiler ein einziger String
"Sx_ON_xE"
Genau das ist zb der Trick, warum man1 | printf( "Help: dieses Commando gibt ein\n"
|
2 | " Verzeichnis aus\n"
|
3 | " Optionen:\n"
|
4 | " -r rekursiv\n"
|
5 | " -d mit Datum\n"
|
6 | " -s ohne Systemdateien\n" );
|
machen kann. Also einen String auf mehrer Programmzeilen verteilen, so
dass man im Code sieht, wie die Ausgabe auf der Konsole aussehen wird,
aber trotzdem keine großartigen Klimmzüge machen muss oder mehrere
printf benutzen muss. Eine Abfolge von Stringliteralen wird vom Compiler
automatisch zu einem einzigen String-Literal zusammengezogen.
Bei CMD_SET_VALUE(value) könnte das bei dir zu einem Problem werdenm,
wenn value kein String Literal ist, aber ansonsten sollte das auch so
gehen.
Allerdings:
Auf die Art baust du dir eine Menge langer String Literale zusammen. Was
spricht gegen eine Funktion, die einfach einen String ausgibt und davor
und dahinter den Prafix bzw. Postfix drann hängt?
1 | void SendCommand( const char* cmd )
|
2 | {
|
3 | sendString( PREFIX );
|
4 | sendString( cmd );
|
5 | sendString( POSTFIX );
|
6 | }
|