#ifdef
-
Hallo!
Eins meiner Programm soll ein Logfile schreiben, allerdings nur wenn man es explizit möchte zum debuggen. Um nicht bei jedem Aufruf eine if Abfrage machen zu müssen ob das Logfile geschrieben werden soll, habe ich folgendes gemacht:
#ifdef WRITELOGFILE #define LOGFILE(a,b,c) WriteLogFile(a,b,c); #else #define LOGFILE #endif void WriteLogFile(char *cText, int iValue1, int iValue2) { static FILE *fLogFile; fLogFile=fopen("logfile.txt","at"); if (fLogFile == NULL) return; fprintf(fLogFile, cText, iValue1, iValue2); fclose(fLogFile); }
Aufgerufen wird das ganze dann z.B. so:
LOGFILE("Verfügbarer Speicher: %d Bytes\n", iMem, 0);
Meine frage ist nun, ob es zu Fehlern kommen kann wenn ich LOGFILE aufrufe, wenn WRITELOGFILE nicht definiert ist. Bisher hatte ich zwar keine grossen Probleme damit, aber sicher ob ich das so lassen kann bin ich mir auch nicht.
-
Franz schrieb:
Meine frage ist nun, ob es zu Fehlern kommen kann wenn ich LOGFILE aufrufe, wenn WRITELOGFILE nicht definiert ist. Bisher hatte ich zwar keine grossen Probleme damit, aber sicher ob ich das so lassen kann bin ich mir auch nicht.
Naja, man kann sich schon Szenarien ausdenken, bei denen die Ausdrücke sich unterschiedlich verhalten ('LOGFILE("aaa", "bbb", 23) * 42'). Wenn die Szenarien aber hinreichend brav sind, passiert wohl nicht viel. Aber warum nicht:
void WriteLog(char const *text, int i1, int i2) { # ifdef WRITELOG /* sinvolles */ # else /* nix */ # endif }
(Das 't' bei fopen(..., "at") ist übrigens falsch.)
-
Sollte das nicht
#else #define LOGFILE(a,b,c) #endif
heißen? Ansonnsten verwandelt er das:
LOGFILE(1,2,3);
ja in:
(1,2,3);