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