Re: Proè to není chyba?
Miroslav Mraz
mrazik na volny.cz
Úterý Duben 30 18:16:31 CEST 2024
Jenže takhle C ani C++ nefunguje. Mezi unsigned a signed si to přetypuje
automaticky. Pokud tedy máte na parametry jiné požadavky než autor
knihovny, musíte si to ohlídat explicitně sám. V tom je právě kouzlo
těchto jazyků - můžete zapsat cokoli kamkoli aniž by vám překladač házel
klacky pod nohy. Ovšem s touto svobodou přichází i zodpovědnost ohlídat,
že neděláte blbosti. Ilustrační příklad - předpoklad je že z počítáte
jako unsigned a lib_fnc akceptuje pouze signed v celém jeho rozsahu :
void lib_fnc (const int n) {
printf("n = %d\n", n);
}
int check (const unsigned n) {
const int result = n; // explicitní přetypování není třeba
if (result < 0) {
// chyba, ale zřejmě nebude kritická, jen info
syslog ("Unsigned parameter \"lib_fnc\" overflow 0x%08X\n", n);
return 0; // ??? podle okolností
}
return result;
}
int main(void) {
const unsigned z = 0x8FFF0000u;
lib_fnc(check(z));
return 0;
}
Mrazík
On 29. 04. 24 22:24, Petr Labaj wrote:
> Však tady to taky hlídá.
> Ale protože z nějakého důvodu mám na parametry jiné požadavky než autor
> knihovny, tak si to pěkně přetypuju.
> A čtenář programu to později uvidí a zamyslí se, pokud mu to
> nepředžvýkám do komentáře.
>
> PL
>
> *******************
>
> Dne 29.4.2024 v 22:19 Aleš Procháska napsal(a):
>> Tak to by mě Pascal hnal. To si sakra hlídá, abych funkci volal s
>> kompatibilními parametry.
>>
Další informace o konferenci Hw-list