Otlet kellene - C macro

Andras Tantos andras_tantos at yahoo.com
Thu Mar 11 16:08:13 CET 2004


Hali!

> Konkretan:
> #define mysprintf_P(vardest,formatstr,varsrc) {__flash static const char
> __formatstr[]=formatstr;sprintf_P(vardest,__formatstr,varsrc);}
>
> mysprintf_P(system.queue[2].ibuf,">AJKS%05u%05u",(temp,temp)); ->
Expression
> has no effect
> A temp,temp -el van baja.

Ez igy nem fog sajna menni. Viszont (az ujabb) C szabvanyok is definialjak
az inline fugvenyeket. Megprobalhatod tehat ezt:

inline int mysprintf_P(char *vardest,const char *formatstr, ...) {
    __flash static const char __formatstr[]=formatstr;
    return sprintf_P(vardest,__formatstr,varsrc);
}

Vagy egy masik (kevesbe szep, de mukodo megoldas):

#define mysprintf_P(formatstr,prinf_params) { \
   __flash static const char __formatstr[]=formatstr; \
   sprintf_P printf_params; \
}

Hasznalat:

mysprintf_P(">AJKS%05u%05u",(system.queue[2].ibuf,__formatstr,temp,temp))

Azaz a parameterek sorrendje mas, es a masodik zarojelen beluli masodik
parameter mindig __formatstr.

> > Csak ötlet.
> > A feltételes oprátort nem lehet bevonni a definicióba ?
>
> Erre gondolok en is, de nem tudok a relacioba mit irni.
> #if(miiiii??? )

Ez nem lesz jo. #define-on belul nem lehet preprocesszor direktiva. A C
preprocesszor nem rekurziv.

Udv,
Tantos Andras
<http://andras.tantos.homedns.org>



More information about the Elektro mailing list