C Präprozessordirektive
-
Ich bins schon wieder.
#include <stdio.h> #define CHECK (str) \ if ( a < 0 ) \ { \ printf(str); \ } int main() { signed int a = -3; CHECK("Fehler"); }
gcc.c: In function ‘main’: gcc.c:10: error: ‘str’ undeclared (first use in this function) gcc.c:10: error: (Each undeclared identifier is reported only once gcc.c:10: error: for each function it appears in.) gcc.c:10: error: expected ‘;’ before ‘if’
Warum ist str "undeclared"
Anstelle von str soll ja fals a < 0 Fehler ausgegeben werden.
Ist bestimmt wieder ganz leicht für euch
-
kein leerzeichen zwischen Macronamen und Parameterliste.
-
Meinst du so:
#include <stdio.h> #define CHECK (str) \ if ( a < 0 ) \ { \ printf(str); \ } int main() { signed int a = -3; CHECK ("Fehler"); }
Funktioniert trotzdem nicht.
-
Er meint so:
#include <stdio.h> #define CHECK(str) \ if ( a < 0 ) \ { \ printf(str); \ } int main() { signed int a = -3; CHECK ("Fehler"); }
-
Das wars.
Also muss bei #define kein leerzeichen folgen, wenn ich es allerdings in der funktion nutze, muss ich eines setzen oder?
-
chipper schrieb:
wenn ich es allerdings in der funktion nutze, muss ich eines setzen oder?
Das ist egal.
-
Beim Aufruf des Makros ist es egal, nur bei der Definition des Makros darf keine Leerzeichen stehen (sonst kann der Präprozessor nicht unterscheiden, ob es ein Makro mit Parametern sein soll oder aber der Klammerausdruck schon Teil der Ersetzung sein soll).
-
Danke wieder was gelernt