"Optionalen" Code einbauen

ähnlich #ifdef

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

“Optionalen” Code einbauen
kennt ihr eine andere Möglichkeit, ‘optionalen’ Code einzubauen, als #ifdef?

Ich will nämlich zu testzwecken jetzt mein Programm wesentlich mehr ausgeben lassen als später, nur würde #ifdef den Code um etliches anwachsen lassen :confused:

wisst ihr was?


wie waere es, wenn du deine jetztige version unter “old.c” speicherst und einfach so weiterschreibst :wink: ?


das wär ziemlich dumm, weil ich das ja nach belieben ein oder ausschalten will.

zu debugging zwecken halt…


Sers,

viel besser als so geht’s nicht:

#ifdef DEBUG

#define DEBUG_OUT(text) fprintf/(stderr, test)
#define ANDERES_MAKRO(p1,p2) ....
....
....

#else

#define DEBUG_OUT(x)
#define ANDERES_MAKRO(x,y)
...
...

#endif

Das ganze in debug.h und in files in denen du das brauchst inkluden.
Für Debug Zeug mit -DDEBUG kompilieren, z.B. andere Targets im Makefile.


Nicht ganz trivial, siehe news:1g2qju7.1hixu8x16u344qN%spamthis@haun-online.de ff


öhm, und wie such ich jetzt diese news? mit google klappts irgendwie net :wink:


Doch, http://groups.google.com/advanced_group_search?hl=en&lr=&ie=UTF-8&oe=utf-8, und dann findest du sofort http://groups.google.com/groups?safe=images&ie=UTF-8&oe=utf-8&as_umsgid=1g2qju7.1hixu8x16u344qN%25spamthis@haun-online.de&lr=&hl=en

Das Problem ist, dass du dir mit Loesungen ala
#ifdef DEBUG
#define DEBUG_OUT(text) fprintf/(stderr, test)
#else
#define DEBUG_OUT(x)
#endif

u.a. bei sowas in den Fuss schiesst.

if (foo) DEBUG_OUT(„foo“);
i++;

zudem kannst du keinen Formatstring angeben.

Vollstaendige Diskussion: http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=utf-8&threadm=1g29pus.1ulfghm7avczkN%25spamthis%40haun-online.de&rnum=1&prev=/groups%3Fhl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3Dutf-8%26q%3DFunktionsaufruf%2Bsoll%2Bsich%2B%2522in%2BLuft%2Baufl%25C3%25B6sen%2B%2522%26btnG%3DGoogle%2BSearch

Ich nehm

#ifndef NDEBUG
int inline TRACE(const char * fmt,…) {
// printf-Code hier
}
#else
inf inline TRACE(const char * fmt,…) { }
#endif

edit: Bitte für lange URLs das [url]-Tag verwenden, damit die Anzeige gekürzt werden kann. Danke -Yves


Hi,

In den Fuß schiesst?? Nein.
Entweder:
if(foo) fprintf(stderr,„test“);
i++;
oder:
if(foo);
i++;
Kommt raus. Syntaktische sowieso semantisch jeweils korrekt.
Und die leere if-clause wird wegoptimiert, außer foo
hat seiteneffekte, aber dann möchte man die wohl beibehalten.

Richtig, aber sollte ja mehr ein Wink in die richtige Richtung sein,
als eine solide Lösung.
Sowieso sollte man nie printf(variable) verwenden sondern
printf(„%s“, variable). printf an sich ist schon eine unschöne Sache,
für Texte sollteman besser fputs verwenden.

ciao