Log na życzenie - Debug/Release.

Odpowiedz Nowy wątek
2011-08-30 19:05
Haende
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;
}

Pozostało 580 znaków

2011-08-30 22:00
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?


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-08-30 22:03

Pozostało 580 znaków

2011-08-30 23:41
Haende
0

tak, dzięki ;)

Pozostało 580 znaków

2011-08-31 10:17
cccccccc
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

Pozostało 580 znaków

2011-08-31 10:36
0

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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-08-31 11:08
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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