moin moin... ich hätte da mal wieder ein kleines Problem. Diesmal ist es ein kleines Problem mit der C-Programmierung. Und zwar bei dem Befehl #ifdef xx wird ja nachfolgende Programmteil nur bearbeitet wenn xx definiert ist. Diese Bearbeitung schieht ja zur Kompiliererzeit!! Jetzt wollte ich "xx" noch etwas "erweitern", dh zb "#ifdef (xx && yy || zz)" (yy, zz wird logischerweise dann auch definiert). Jetzt weiß ich allerdings nicht ob das C überhaupt zulässt oder das immer währed der Laufzeit (per normale if-abfrage) bearbeitet wird. ich hoffe das ich verständlich ausgedrückt habe. danke schon mal vorraus :-) mfg Marc
Hi Marc, " Und zwar bei dem Befehl #ifdef xx wird ja nachfolgende Programmteil nur bearbeitet wenn xx definiert ist." soweit ich das verstanden hab wird der nachfolgende Programmteil nur KOMPILIERT wenn xx def ist... " ifdef Mit der ifdef-Direktive kann geprüft werden, ob ein Symbol definiert wurde. Falls nicht, wird der Code nach der Direktive nicht an den Compiler weitergegeben. Eine ifdef-Direktive muss durch eine endif-Direktive abgeschlossen werden. " http://de.wikibooks.org/wiki/C-Programmierung:_Pr%C3%A4prozessor Aber ich glaub ich hab die Frage falsch verstanden ^^ Grüße
moin Tom hast es ein wenig falsch verstanden... ich wollte eigentlich nur wissen ob der Präprozessor #ifdef noch funktioniert wenn ich dem mehrere Symbole (zb &&-verknüpft) zum überprüfen übergebe. mfg Marc
>Und zwar bei dem Befehl #ifdef xx wird ja nachfolgende Programmteil >nur bearbeitet wenn xx definiert ist. Diese Bearbeitung schieht ja zur >Kompiliererzeit! Naja, bearbeiten ist nicht so ganz richtig. Der Programmteil wird vom Präprozessor nur in die zu bearbeitente Datei eingefügt. Der Compiler selber sieht von dem #ifdef gar nichts mehr. >Jetzt wollte ich "xx" noch etwas "erweitern", dh >zb "#ifdef (xx && yy || zz)" (yy, zz wird logischerweise dann auch >definiert). >Jetzt weiß ich allerdings nicht ob das C überhaupt zulässt oder das >immer währed der Laufzeit (per normale if-abfrage) bearbeitet wird. Wie wäre es mit ausprobieren? Zur Laufzeit kann das nicht mehr bearbeitet werden, da die # Anweisungen wie gesagt schon vor dem kompilieren verarbeitet werden. Wen nich das Ganze bei mir teste, klappt es übrigens nicht. Der Präprozessor kann wohl nur einfache logik, aber evtl. kannst du das von dir gewünschte aus mehreren Schirtten zusammenbauen. Mußt du mal selber probieren. Besonders gut ist übrigens der CodeWarrior in solchen Dingen, da kann man sich ansehen, was der Präprozessor aus einer Datei macht :-)
Mit ifdef überprüfst du nur ob ein Symbol definiert wurde...probiers mal mit: " Mit #if kann ähnlich wie mit #ifdef eine bedingte Übersetzung eingeleitet werden, jedoch können hier konstante Ausdrücke ausgewertet werden. Beispiel: #if (DEBUGLEVEL >= 1) # define print1 printf #else # define print1(...) (0) #endif #if (DEBUGLEVEL >= 2) # define print2 printf #else # define print2(...) (0) #endif Hier wird abhängig vom Wert der Präprozessorkonstante DEBUGLEVEL definiert, was beim Aufruf von print2() oder print1() passiert. Der Präprozessorausdruck innerhalb der Bedingung folgt den gleichen Regeln wie Ausdrücke in C, jedoch muss das Ergebnis zum Übersetzungszeitpunkt bekannt sein. " Grüße
> Diese Bearbeitung schieht ja zur Kompiliererzeit!! Ja, es ist eine Präprozessoranweisung. Aber das ist kein Grund, zu schreien. > Jetzt wollte ich "xx" noch etwas "erweitern", dh zb "#ifdef (xx && > yy || zz)" (yy, zz wird logischerweise dann auch definiert). Das geht so natürlich nicht. #ifdef prüft, ob das, was dahinter ist, als Naeme im Präprozessor definiert wurde (mit #define). (xx && yy || zz) ist aber natürlich kein Name. Du kannst aber #if nehmen. Das nimmt die Werte, also: #if xx && yy || zz > Jetzt weiß ich allerdings nicht ob das C überhaupt zulässt oder > das immer währed der Laufzeit (per normale if-abfrage) bearbeitet > wird. Mit #if wird's zur Compilezeit ausgewertet, wie mit allen Präprozessor-Direktiven.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.