Makro "abstellen"
-
Hoi,
eine kurze Makro Frage: Ich will, dass ein Makro nur im Debug Modus was macht und im Releas Modus quasi garnichts.
Ist das der richtige Weg:?
#if defined _DEBUG #define FOO(X) ((X)*(X)) #elif defined NDEBUG #define FOO(X) #endifOder kann das zu Problemen führen?
-
miri schrieb:
Hoi,
eine kurze Makro Frage: Ich will, dass ein Makro nur im Debug Modus was macht und im Releas Modus quasi garnichts.
Ist das der richtige Weg:?
#if defined _DEBUG #define FOO(X) ((X)*(X)) #elif defined NDEBUG #define FOO(X) #endifOder kann das zu Problemen führen?
Sowas wird oft gemacht. Allerdings ist mir die von dir benutzte Syntax unbekannt.
ich kenne nur "#ifdef" und nicht "#if defined"...
-
Es geht beides. Ist Geschmacksache, was man da nimmt.
Gruß Kimmi
-
Also brauch ich nicht sowas freakiges wie #define FOO(X) (void*)0
?
Ich frag nur, weil ich das schon paar mal gesehen hab.
-
miri schrieb:
Also brauch ich nicht sowas freakiges wie #define FOO(X) (void*)0
?
Ich frag nur, weil ich das schon paar mal gesehen hab.Das hat anderen Zweck.
willst Du im Code stehen haben
if(a==5) LOG("a=",a);dann muß im releasemode auch ein
#define LOG(x,y) {}da sein.
(void*)0 ist wohl seltsam. vielleicht ist ((void)0) gemeint. aber auch das ist eigentlich eine schreibweise aus dem land von C.
-
Was man da "braucht" hängt davon ab, was das Makro darstellen soll. In deinem Beispiel könnte ich mir vorstellen, dass ich
a = FOO(b);schreiben wollte, das ginge mit der "Release"-Variante ja nicht.
-
miri schrieb:
Also brauch ich nicht sowas freakiges wie #define FOO(X) (void*)0
?
Ich frag nur, weil ich das schon paar mal gesehen hab.Nein. Wenn du wirklich nur möchtest, dass FOO im Release-Modus nichts macht, genügt deine Definition.
In anderer Hinsicht hat sie aber einen Fehler: Falls _DEBUG nicht definiert ist und NDEBUG auch nicht, bleibt FOO undefiniert. Besser so schreiben:
#ifndef NDEBUG // Debug-Version #define FOO(X) ((X)*(X)) #else // Release-Version #define FOO(X) #endifNDEBUG ist das korrekte Makro, um festzustellen, ob dein Code im Debug- oder Release-Modus übersetzt wird.
Stefan.
-
Ich würde
((void)0)nehmen. Ist "tried and true".