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, takže 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