Jak na PIC a C++ nebo spise C

Jan Waclawek konfera na efton.sk
Sobota Prosinec 4 18:07:58 CET 2010


>Toto neplati. Pokial sa neuvedie nic na mieste navratoveho typu,
>prekladac predpoklada int. 

Ano. Norma bohuzial kodifikuje aj stary, K&R styl deklaracie funkcie, s odovolavanim sa na princip "mensieho zla".

>Spravidla na to upozorni warningom.

... kvoli "zlu" v "mensom zle"... ;-)

>Zoznam parametrov moze ostat prazdny, t.j. (), ale nie som si isty, ci
>je to spravne podla ANSI C normy... V C++ je to OK.


Poslednu hodinu som stravil skumanim normy v tomto smere. Nie je to jednoduche prave kvoli tomu, ze norma; naviac norma pomerne zmatene pojednava o deklaraciach, definiciach a prototypoch funkcii na 3 roznych miestach, aj ked sa jedna o tu istu vec (a casto sa polozky z tych 3 miest prekryvaju). Naviac sa do toho pletie prave aj ta K&R-ovitost, takze tie formulacie su hrozne komplikovane aby neposkodili ani jednemu stylu.

Zda sa, ze pointa je v 6.7.5.3; #14 tam hovori:
[...] An empty list in a function declarator that is part of a definition of that function specifies that the function has no parameters. 

Je treba si uvedomit, ze tu sa hovori o "identifier list", t.j. zozname parametrov podla stylu K&R (bez uvedenia typov). Lenze navonok to je vlastne jedno: ked su prazdne zatvorky, je fuk, ze co presne v nich nie je, vsakano...

Ten odstavec pokracuje este zaujimavejsou klauzulou:
The empty list in a function declarator that is not part of a definition of that function specifies that no information about the number or types of the
parameters is supplied.

Inaksie povedane, prototyp funkcie (co sa typicky pise do .h) nemusi mat uvedene parametre (aj ked je to zo styloveho hladiska vrcholne nevhodne).


(Inak 6.7.5.3#10 hovori prave o tom, ze to void sa tam pouzit moze: The special case of an unnamed parameter of type void as the only item in the list
specifies that the function has no parameters.)


>Inac Herout o void pojednava. Kapitola 9.2.2. Procedury a datovy typ void

Mne ta Heroutova knizka (knizky) nejako neliezli do gebule, proste to nie je moj styl. Suchoparne ucebnicove, krcovito systematicke. Ale je to casto doporucovana knizka a verim tomu ze toto je pre mnohych ta najspravnejsia cesta; ja by som skor odporucil K&R.

---

Inak nedavno som rozmyslal o tom, ako som sa vlastne k C dostal a preco ho chapem tak ako ho chapem. Ono to bolo tak, ze som sa najprv naucil programovat, t.j. principy a nie konkretny jazyk, vdaka predmetu "programovanie" na strednej skole a vdaka pani profesorke Blahutovej, ktora pokial viem bola spolutvorcom metodiky, a za co som jej dodnes vdacny. Aj ked v tom case som uz nejake zaciatky vo FORTRANe a v BASICu mal za sebou, rychlo som pochopil, v com je nedostatok tych dvoch jazykov a v com je pointa strukturovaneho programovania. Programy sme pisali v akomsi pseudojazyku (nie nepodobnemu Pascalu) ktory mal slovenske klucove slova; a rucne sme ich podla pevne stanovenych pravidiel "prekladali" do BASICu, aby sme si ich mohli prakticky odskusat na PMD-85 (lebo ine nebolo). Aj toto bola dobra skola, aj ked dnes by nad tym kdekto ohrnul nos.

Potom prisiel Pascal a tam som videl, ze sediva je teoria a strom zivota je plny kompromisov a obchadzok. Ale dali sa s tym robit programy urciteho druhu. Paralelne s tym som sa na roznych osembitoch hral s asm, pretoze som ziadny Pascal pre ne nemal (resp. co som mal ma nezaujalo) a s asm sa dali robit vselijake kuzla, co bolo pekne a zaujimave a dalo sa s tym machrovat. Bolo mi cely cas jasne, ze kde je miesto jedneho a kde druheho. Potom prisli nejake cudzie programy na PC v C, co bolo treba poupravovat, a podobalo sa to na ten Pascal v mnohych ohladoch. Tam som sa naucil ako-tak syntax, aj ked vela veci mi nebolo jasnych a nepacili sa mi. C teda predstavovalo jazyk, ktory pouzivam (na urcene ulohy) z nutnosti; Pascal a asm jazyky, ktory pouzivam (na zvacsa mnou zvolene ulohy) kvoli tomu, lebo sa mi paci.

Napriek rozsiahlej praxi v asm pre jednocipy som teda C nikdy nechapal ako nadstavbu na asm, ale ako zbastardelu verziu Pascalu. Dnes to vidim sice trocha inak, ale myslim si, ze mi to dost pomohlo v tej faze prechodu u jednocipov z asm na C, aj ked na druhej strane je to dodnes trvalym zdrojom mojej nenavisti voci C ako jazyku kompromisov a "lepenia hovna k hovnu" (aby som citoval klasika tejto konferencie MK).

---
Ta knizka, co nedokazem dopisat, nie je ucebnica C, naopak, predpoklada sa, ze citatel C aspon zbezne pozna. Su to take volne lozene uvahy o niektorych javoch, co ma na a okolo C (a to niekedy aj do pomerne velkej vzdialenosti) zaujalo, iritovalo, trapilo. Takze nie je ziadna zaruka, ze sa tam odpoved na nejaku konkretnu otazku da najst; to s tym void bola vlastne nahoda.

wek




Další informace o konferenci Hw-list