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...