Warningy C

Jan Waclawek konfera na efton.sk
Pátek Říjen 12 17:25:35 CEST 2018


>
>na obrázku jsou dva warningy v MCUxpresso IDE:
>
>1. Nejsem si jist co znamená a mate mě, ľe jednou není a podruhé je u jinak 
>stejných řádků:
>1758 a 1796, které se liąí jen ' ' vs ']'

To moze byt nasledok optimalizacie - optimalizator mohol tu funkciu
niekolkokrat inlinovat, tie prve riadky jednoducho vyhodit v prvom
prekladanom inlinovanom kontexte, a tie warningy sa uz potom pre tu istu
funkciu neopakuju.


>(problém ľe to nechodilo vyřeąen a zároveň warning zmizel, kdyľ se 1797 
>dostal výą)
>
>Co to tedy přesně znamená?


Ze jeden z indexov je typu char; pravdepodobne v, co je typu tVal3,
definiciu ktoreho ste nam neukazali.

Typ char ma tri varianty - samotny char, signed char a unsigned char. Na
rozdiel od inych celociselnych typov samotny char bez kvalifikatora nie je
ani znamienkovy ani neznamienkovy - presnejsie, je jeden z nich, ale
ktory, to je implementation specific a u gcc sa to da nastavit nejakym
command-line prepinacom. Nasledok je, ze programy, v ktorych sa char
pouziva ako aritmeticky typ, nie su prenositelne, a mozu mat prekvapujuce
chyby. Vid kapitola 44 v mojej knihe o C.


>2. Pokud správně chápu, tak mi namlouvá, ľe by bylo dobré okolo && dát 
>závorky, coľ mi přijde matoucí, protoľe bych se pak zbytečně pozastavoval 
>nad tím, proč tam jsou. Bez nich je to pro mě čitelné na první pohled.

Ta precedencia && pred || nie je uplne zrejma, a su napriklad jazyky (napr.
FORTRAN), kde maju rovnaku precedenciu.

Pre mnohych vyvojarov - najma ak prechadzaju medzi jazykmi, alebo citaju
cudzi kod - je jednoduchsie citat zatvorky nez sa snazit si zapamatat
tabulku precedencii pre ten-ktory jazyk.


>A pokud správně chápu, tak to -Wchar atd. se dá pouľít k vypnutí tohoto 
>warningu? Kam to mám napsat?

Do command line ktorym sa spusta gcc; ale v zapornej forme (-Wno-char),
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html


>Nepsal jsem si vlastní make a rozhodně to nemám v plánu, 


Myslite zrejme makefile. Hoci pisat si vlastne make moze byt tiez zaujimava
vyzva.


>takľe bych se rád 
>dozvěděl, do které kolonky v nastavení projektu to napsat:-)

To neviem, taketo IDE (a vlastne momentalne ziadne) nepouzivam.

Warningy sa daju v gcc vypinat aj selektivne pre nejaky usek kodu pomocou
pragiem
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
ale pozor, najma pri optimalizaciach sa kod vlastne vnutorne preusporada a
vtedy tie pragmy vedia fungovat alebo nefungovat prekvapujucim sposobom.


wek




Další informace o konferenci Hw-list