ceckovy kviz 2 (hardcore)

Vláďa Anděl vaelektronik na vaelektronik.cz
Čtvrtek Září 7 12:32:22 CEST 2023


Tohle rád čtu. Sice nejsem programátor, céčko jsem se učil podle 
učebnice Herouta a dál jsem nikdy nepokročil, ale přesně takhle goto 
používám při čtení znaků z 16 znakové klávesnice. Přijde mi to přehledné 
a jednoduché.

Adr1=0; Adr2=0; Adr3=0;
Adr0=0; Zpozkl();  if(!Outkl)   { Znak1='*'; goto Stisk; }
Adr0=1; Zpozkl();  if(!Outkl)   { Znak1='7'; goto Stisk; }
Adr1=1; Zpozkl();  if(!Outkl)   { Znak1='1'; goto Stisk; }
Adr0=0; Zpozkl();  if(!Outkl)   { Znak1='4'; goto Stisk; }
Adr2=1; Zpozkl();  if(!Outkl)   { Znak1='9'; goto Stisk; }
Adr1=0; Zpozkl();  if(!Outkl)   { Znak1='8'; goto Stisk; }
Adr0=1; Zpozkl();  if(!Outkl)   { Znak1='2'; goto Stisk; }
Adr1=1; Zpozkl();  if(!Outkl)   { Znak1='3'; goto Stisk; }
Adr3=1; Adr2=0; Zpozkl();  if(!Outkl)   { Znak1='0'; goto Stisk; }
Adr0=0; Zpozkl();  if(!Outkl)   { Znak1='5'; goto Stisk; }
Adr1=0; Zpozkl();  if(!Outkl)   { Znak1='6'; goto Stisk; }
Adr0=1; Zpozkl();  if(!Outkl)   { Znak1='#'; goto Stisk; }

if(Caskl) Caskl--;       // nestisknuta klavesnice
Opakkl=0;
return;

Stisk:           //ochrana proti dvojimu stisknuti

Anděl

Dne 07.09.2023 v 2:07 Miroslav Šinko napsal(a):
> On 6.9.2023 18:33, Jan Waclawek wrote:
>> Na druhej strane to goto je skutocne svinstvo
>
> S tymto zas uplne nesuhlasim. Je to svinstvo, ked sa pouziva v 
> algoritmoch, to absolutne nepouzivam. Ale na osetrovanie podmienok a 
> skok vylucne na "upratovaci" koniec funkcie je vyhodne ho pouzit. To 
> aj robime a dokonca to doporucujeme novym kolegom. Vedie to k 
> eliminacii chyb (memory leakov) a jednoduchsiemu kodu. Pisem o cistom 
> C, nie C++, kde su moznosti ine.
>
> Majme (s cim sa stretavame vo vacsine nasich kodov) funkciu na prijem 
> dat, ktora musi zistit stav spracovania, ak ok, zistit velkost 
> prijatych dat, ak ok, alokovat data buffer, ak ok, vycitat data do 
> buffra, ak ok, zavolat parsovaciu funkciu, ktora vytvori (alokuje) 
> prehladavaciu tabulku, ak ok, vyhladat record, ak ok, pripadne 
> alokovat buffer na response data k danemu recordu, ak ok, to iste s 
> dalsim recordom, a s dalsim, a s dalsim, atd...
>
> Mozme urobit sekvenciu ifov a elsov, pekne poodsadzovanu az za pravy 
> okraj monitora. V kazdom jednom else uvolnit buffre, ktore boli 
> dovtedy alokovane, t.j. co dalsie else, to kopia predosleho kodu + 
> riadok navyse.
> Alebo mozme urobit sadu funkcii, do ktorych budeme predavat vzdy o 
> jeden parameter viac. Alebo mat jednu free funkciu, kde predame vsetky 
> pointery na buffre, ta bude volana X-krat a odsadzovanie az za okraj 
> monitora aj tak ostane.
>
> No, alebo mozme pisat len ify na negativny vysledok, v nom jeden 
> riadok log(..prislusny error..) a druhy riadok goto _end;
>
> A pred koncom funkcie mat navestie _end:, za ktorym je spolocny kod, 
> ktory sa vykona, aj ked vsetko zbehlo spravne, v zmysle:
> if(data != NULL)
> {
>   free(data);
> }
> if(searchTable != NULL)
> {
>   free(searchTable);
> }
> if(recordX != NULL)
> {
>   free(recordX);
> }
> atd..
>
> Vsetky pointery na alokovane buffre su samozrejme na zaciatku 
> inicializovane na NULL. To je dalsi best practice, mat vsetky premenne 
> inicializovane.
>
> miro
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list