Präprozessor und Übergabe von Variablen



  • hi,

    ich hab folgende anweisungen. in einer funktion steht folgendes:

    SSink4(d, 1);
    

    haha, is nicht sonderlich viel (steht auch noch mehr drin, ist nur nocht so wichtig im moment...

    eine header-datei engl.h wird eingebunden. dort steht folgendes:

    #define SSink4(TYP, VAR) printf("You hit the ship of the length %TYP!\n", VAR)
    

    naja, eigentlich sollte die ausgabe jetzt folgende sein:

    "You hit the ship of the length 1!"

    leider steht dort aber:

    "You hit the ship of the length TYP!"

    warum übergibt er die 1 nicht richtig? naja, blödes schiffe versenken 🙂



  • Whoo, Präprozessor. OK, in diesem Fall ist %TYP in einer String-Konstante und wird deswegen nicht ersetzt, das heißt, du musst ein bisschen magic dafür ziehen. So müsste es gehen:

    #define SSink4(TYP, VAR) printf("You hit the ship of the length %" #TYP "!\n", VAR)
    

    Die Idee dahinter ist, dass #TYP den als TYP übergebenen Ausdruck in eine Stringkonstante unwandelt, so dass aus

    SSink4(d,13);
    

    zu

    printf("You hit the ship of the length %" "d" "!\n", 13);
    

    wird, woraufhin die String-Konstanten zu einer zusammengefasst werden und der Ausdruck gültig wird.



  • 0xdeadbeef schrieb:

    #define SSink4(TYP, VAR) printf("You hit the ship of the length %" #TYP "!\n", VAR)
    

    danke sehr 🙂 genau das wars! meine dozentin hat doch glatt ihr script falsch gehabt. zum glück war ich nicht der einzige, der dieses problem hatte 🙂 der ganze kurs kam nicht weiter, weil sie diesen fehler eingebaut hatte 🙄 naja, jetzt klappt es ja...


Anmelden zum Antworten