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.


Anmelden zum Antworten