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