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