Otlet kellene - C macro
Andras Tantos
andras_tantos at yahoo.com
Sat Mar 13 20:02:16 CET 2004
Hali!
Erre van ertelmes megoldas:
FILE *logstream;
void LogF(const char *aLogFormat,...) {
va_list VaList;
va_start(VaList,aLogFormat);
vfprintf(logstream, aLogFormat, VaList);
va_end(VaList);
}
#define LOG(aLogParams) \
{ \
fprintf("%s (%d) ",__FILE__,__LINE__); \
LogF aLogParams; \
} \
Hasznalat:
LOG(("Doing some CPU heating..."));
LOG(("%s: %dK","Available memory",512);
Egy megjegyzes: a __FILE__ es __LINE__ 'makrok' nem igazan azok, es nem is a
pre-processzor ertekeli ki (legalabbis nemely forditoban). Eppen ezert lehet
a LOG makroban.
Udv,
Tantos Andras
<http://andras.tantos.homedns.org>
> Fuzesi Arnold wrote:
> >>workaround fuggvennyel megoldani csak makroval. Ha erdekel valakit,
leirom
> >>miert, de lehet akar talalos kerdes is.
> >
> > Ja, erdekel!
>
> Kivancsiak vagytok, mi? :-)
> Tudtam :-)
>
> Na, szoval PC-re keszulget egy program (hadrware tesztelgeto), ami igen
> veszelyes dolgokat csinal, es minden ilyen lepest logolni kell. Hogy
> konnyebb dolgom legyen a hibakat javitani, ugy akarok logolni, hogy a
> logfajlbol tudjam hogy melyik forraskodban van a gigxer.
>
> pelda:
> ---
> fprintf(logstream,"%s (%d) %s",__FILE__,__LINE__,"Doing some CPU
heating...");
> fptintf(logstream,"%s (%d) %s: %dK",__FILE__,__LINE__,"Available
memory",512);
> //
> do_some_dangerous_things();
> //
> fprintf(logstream, ...)
> ---
>
>
> Nna, a __FILE__ es a __LINE__ ket olyan makro, amit a preprocesszor allit
> elo (WatcomC) es az aktualis forraskod fileneve es az aktualis sor szama.
> Ez az ami miatt nem lehet fuggvennyel, mert abban egyszer irom le, es
mindig
> a fuggveny torzsenek filenevet es soranak szamat irja ki. Amit meg
> helyettesiteni kene az az fprintf(...). Lathato hogy az
> fptintf(logstream,"%s (%d)",__FILE__,__LINE__) mindig ugyan az, nem kene
> folyton leirogatni. De a formatstring vegehez jo lenne a sajat
parametereket
> formatumat odatenni, meg az fprintf vegere a tetszoleges szamu parametert.
> Az elso problema nem gond, de a valtozo parameterek...
>
> A ...-ot kellene kitalalni:
> #define LOGF(my_format,...) fprintf(logstream,"%s
> (%d)"#my_format,__FILE__,__LINE__,...)
>
>
> --
> ((( Móczik Gábor )))--((( hu <- DOT <- freemail <- AT <- progzmaster )))
> ((( Debian unstable )))-((( Kernel 2.4.20 )))-((( Celeron466 / 128Mb )))
> ((( --> Vigyázat! Ön súlyos közlekedési balesetet szenvedett. <-- )))
> ((( --> Kívánja, hogy a légzsák felfúvódjon? <-- )))
>
>
>
More information about the Elektro
mailing list