[elektro] C őrjöngés...

Skandar Graun sgraun at gmail.com
Wed Nov 27 17:17:58 CET 2013


Köszi


2013. november 27. 17:09 SZIGETI Szabolcs írta, <szigiszabolcs at gmail.com>:

> Igen, Erre valójában nincsen mentség, de ez a C alacsony szintűségéből
> ered. Történelmi oka az, hogy a printf egy ugyanolyan mezei függvény, mint
> bármelyik másik, csak ugye meg kellett oldani a tetszőleges számú
> argumentum használatát. Olyanmeg csak buherálással van a C_ben. Itt
> valójában az történik, hogy híváskor bepakolja a verembe az összes
> argumentumot, a printf, meg a _formátumstring_ alapján kibányássza onnan.
> Ha rossz a stringed, akkor rossz formában fogja kiszedni. Ez olyan, mintha
> mindent beraknál egy char tömbbe, aztán utána kiszednéd. ha nem ugyanolyan
> formában szeded ki, akkor bukta van.
> Kulturáltabb fordítók felismerik, hogy a printf különleges és megnézik,
> hogy rendben van-e az argumentumlista.
>
> Pl. C++-ban ez működne, hogy
> int i;
> double f;
> cout<<"Az érték:"<<i<<" átlagosan "<<f<<"\n"
>
> De ennek is megvannak a maga bajai, itt ha mezőszélességet meg tizedesjegy
> hosszat akarsz állítani, akkor sokkal gusztustalanabb lesz, mint a printf.
>
> Ezt tudom ajánlani puskának: https://infoc.eet.bme.hu/jegyzet/c_puska.pdf
> (második oldal, formatted output fejezet).
>
> Szabolcs
>
>
>
> 2013. november 27. 16:59 Skandar Graun írta, <sgraun at gmail.com>:
>
> > "Kultúráltabb fordító elemzi a formátum stringet és szól (warning) ha nem
> > egyezik meg a formátumstringben szerinti típus a megadottal."
> >
> > Pontosan... mert minden marhaságra szól...
> > mint pölö:
> > pakarutins.c:237: warning: pointer targets in passing argument 1 of
> > 'UART2_PutChar' differ in signedness
> >
> > Ezt itt miért nem tudta?
> > De mindegy, már kiőrjöngtem magam. :)
> >
> >
> >
> > 2013. november 27. 16:55 Lajos Rancz írta, <lajos.rancz at gmail.com>:
> >
> > > Helló!
> > >
> > > Mivel nem C++-ban vagy ahol ezt meg lehetne csinálni (mert vannak rá
> > nyelvi
> > > eszközök), csak C-ben ezért ez a következőképpen működik:
> > >
> > >    1. va_start-al inicializál és kitalálja a paraméterek számát, i = 0
> > >    2. utána a formátum string alapján megcastolja az i-edik a
> paramétert
> > a
> > >    va_arg makróval a kívánt típusra (tehát a %valami alapján van egy
> > > switch)
> > >    3. kiír
> > >    4. i++, goto 2 ha még van
> > >
> > > Kultúráltabb fordító elemzi a formátum stringet és szól (warning) ha
> nem
> > > egyezik meg a formátumstringben szerinti típus a megadottal.
> > >
> > > Üdv
> > >
> > >
> > >
> > > 2013. november 27. 16:46 Skandar Graun írta, <sgraun at gmail.com>:
> > >
> > > > %d
> > > >
> > > > Nem mondod, hogy nem elég alapvetően meghatározni a változó
> típusát...
> > > még
> > > > külön tököljek vele a kiíratásnál...
> > > >
> > > >
> > > > 2013/11/27 Lajos Rancz <lajos.rancz at gmail.com>
> > > >
> > > > > Hi!
> > > > >
> > > > > "%d"-vel vagy "%u"-val írod ki?
> > > > >
> > > > > Üdv
> > > > >
> > > > >
> > > > > 2013/11/27 Skandar Graun <sgraun at gmail.com>
> > > > >
> > > > > > Mijaf at szért ír ki signedként az sprintf egy unsigned intet???
> > > > > > Ááááááááááá
> > > > > > -----------------------------------------
> > > > > >           elektro[-flame|-etc]
> > > > > >
> > > > > -----------------------------------------
> > > > >           elektro[-flame|-etc]
> > > > >
> > > > -----------------------------------------
> > > >           elektro[-flame|-etc]
> > > >
> > > -----------------------------------------
> > >           elektro[-flame|-etc]
> > >
> > -----------------------------------------
> >           elektro[-flame|-etc]
> >
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list