Warningy C
Jan Waclawek
konfera na efton.sk
Pátek Říjen 12 23:18:58 CEST 2018
> 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í:-)
Spravne.
> 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*).
To su kniznicne funkcie, predpisane normou. Tak ich nepouzivajte alebo si
na ne spravte wrapper.
Inak zaujimavostou su v tejto suvislosti funkcie z <ctype.h>, napr.
isalpha() alebo tolower()/toupper(), ktore maju ako parameter int (a aj
vracaju int), takze ak je char v danej implementacii znamienkovy, tak pri
pouziti znakov z oblasti 0x80-0xFF dojde k znamienkovemu rozsireniu a tym
niekedy k prekvapivemu vysledku.
> v je enum, take v podstatì int,
No, praveze nemusi byt.
Norma predpisuje, ze enum je kompatibilny s niektorym z celociselnych
typov, ale ze z ktorym, je implementacne zavisle (t.j. zavisi to od
prekladaca).
V gcc sa s pouzitim -fshort-enums da zvolit rezim, ked sa enumu priradi
najmensi pouzitelny typ, a to moze byt aj signed alebo unsigned char
(podla toho, ci sa vo vymenovani vyskytne zaporna hodnota alebo nie).
Manual priamo varuje pred pouzitim tohoto rezimu
https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Code-Gen-Options.html#index-fshort-enums
.
https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#Structures-unions-enumerations-and-bit-fields-implementation
wek
Další informace o konferenci Hw-list