Pr#prozessor Ersetzen mit ##
-
Hi,
ich habe versucht bei einem Funktionsaufruf einen Teil der Funktion durch ein Makro ersetzen zu lassen. Etwa so
#define func(NAME,para1) uint8 ##NAME_Func(para1);
Das ganze geht auch soweit das der ##NAME richtig ersetzt wird. Das Problem ist nur das auch alle Leerzeichen gelöscht werden und dann der Funktionsname mit dem Rückgabetyp verbunden wird.
Beispiel:
func(Hallo,5);
erzeugt :
uint8Hallo_Func(5);
Das gibt natürlich Probleme. Laut Kernighan Ritchie werden die Leerzeichen immer entfernt. Gibts da vielleicht einen Trick das zu umgehen ?
-
Ey sind wieder ferien?
-
Du hast das ## an die falsche Stelle gesetzt (btw, das müsste eigentlich uint8NAME_Func(5); ausspucken) - richtig wäre:
#define func(NAME,para1) uint8 NAME##_Func(para1);
PS: Was soll das Makro eigentlich erzeugen? Einen Funktionsaufruf oder einen Funktionsprototyp? (wenn ersters, ist das 'uint8' fehl am Platz, andernfalls müsstest du als zweites Makro-Parameter einen Typ angeben)
-
Der Code macht sowieso keinen Sinn.
Was soll der Rückgabetyp da?Und wenn du die Leerzeichen erhalten willst
lass doch einfach das "##" weg.
Bzw. machs hinter das NAME@cokder
Seit Donnerstag in BW
-
Ihr habt Natürlich mit dem Rückgabetyp recht, der gehört da nicht hin.
Das ganze soll ein Funktionsaufruf werden. Ich habe ca 10 Funktionen, die alle mit einem Kürzel Anfangen :
XXX_Func
XXX1_Func
usw.Ich mache jetzt daraus einfach ein Macro, das mir dann anhand des ersten Parameters die entsprechende Funktion aufruft.
@Storm.Xapek.de
Danke das funktioniert.