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