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