Warningy C

Pavel Hudecek edizon na seznam.cz
Pátek Říjen 12 18:40:04 CEST 2018


Díky.

Char zásadně nepoužívám, s výjimkou práce s texty. Jinak uint8_t. Přesně 
kvůli uvedeným věcem se mi nelíbí:-)
Naopak by se mi líbilo, kdyby funnkce jako strcat nedělaly warning, když do 
nich cpu uint8_t a nedám před něj (char*).

v je enum, takže v podstatě int, n je taky int. Ale je možné, že n bylo v té 
době uint8_t (ten obrázek jsem měl připravenej asi týden). Jinak ten uint8_t 
používám jako index velmi často, ale tento warning jsem předtím asi nikdy 
neviděl.

(-Wno-char) - to by vysvětlovalo, proč jakékoli pokusy někam dát -Wchar 
nevedly k úspěchu:-)

makefile: ono je to i tak dost výzva, takže si to nechci komplikovat tím, že 
do toho dobrovolně přidám výzvu 2, která má určitě mnoho zajímavých 
specialit s nečekanými účinky kdoví kde:-)

pragma:
první co jsem zkusil, bylo pragma warn- na který jsem zvyklý z codevisionu, 
ale úspěch se nedostavil:-)

PH

-----Původní zpráva----- 
From: Jan Waclawek

>
>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. 



Další informace o konferenci Hw-list