Log na życzenie - Debug/Release.

0

Mam sobie bibliotekę:

//plik.h

#include <cstdarg>
#include <iostream>
#include <fstream>

#ifdef DEBUG_ON
#define myprintf printf
#define myout std::cout
#else
#define myprintf myPrintf
#define myout mycout
#endif

inline int myPrintf(const char* format, ...){} ;

extern std::ofstream  mycout;

//plik.cpp

#include "myout.h"
std::ofstream mycout("/dev/null") ;

i kompiluję w zależności czy chcę debug czy release. ( -DDEBUG_ON )

Jak widać, w przypadku release i włączonej optymalizacji wszystkie wystąpienia myprintf w kodzie programu zostaną zignorowane. W przypadku debug, będzie to po prostu printf.
Natomiast wystąpienia myout w przypadku release zostaną przekierowane do /dev/null, w przypadku debug do std::cout.
Moje pytanie brzmi: jak optymalniej rozwiązać sprawę myout? Tzn. aby wszystkie wystąpienia myout również zostały zignorowane.

Dziękuję i pozdrawiam

Przykładowy program:

#include "myout.h"

int main(int argc, char *argv[])
{
    myout<<"Hello "<<"world"<<std::endl<<\t:)\n" ;
    int a=4,b=-3;
    myprintf("%d x %d == %d\n",a,b,a*b);
    return 0;
}
0

Hm jak chcesz użyć sztuczek preprocesorowych to tak:

#ifdef DEBUG_ON
#define PRINTF_DEBUG(params) printf(params);
#else
#define PRINTF_DEBUG(params) ;
#endif

używasz tego tak,jakby był printfem najzwyklejszym,ale w trybie innym niż DEBUG_ON wszyskie wywałania tego przed kompilacją zostaną zamienione na średniki.

O taki efekt ci chodziło?

0

tak, dzięki ;)

0

a co z myout? w jaki sposób to zrobić?

#ifdef DEBUG_ON
    #define myprintf printf
    #define myout std::cout
#else
    #define myprintf(...)
    #define myout // ?? i właśnie co?
#endif
0

Poszukaj "std null stream" w Google. Np: http://www.boost.org/doc/libs[...]ost/test/utils/nullstream.hpp

0

Tutaj jest coś ciekawego na ten temat:
http://accu.org/index.php/journals/1304

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0