Unix komandinės eilutėProgramuotojus į savartyną! (pagal Jerry Pournelle) Dauguma kompiuterio vartotojų niekada nerašė programų. Iš dalies, tai yra teisinga, juk ir knygas leidžia tik rašytojai (Lietuvoje ir tai negalioja, ypač kompiuterinės tematikos knygoms, - jas rašo kas tik netingi, o dažniausiai tie, kurie mažiausiai tai sugeba. Ir pirštu rodyti nereikia - paimkit pirmą papuolusią ir... kas turi akis - težiūri...)
Tačiau, iš kitos pusės, būtų gerai, kad kompiuteris darytų, ką mes norime - tačiau kaip pagerinti jo darbą žinome tik patys. Gal iš tikro tikroji kompiuterių revoliucija bus tada, kai programavimas bus panašus į raštingumą. Knygas juk rašome ne visi, tačiau kiekvienas, net neturintis didesnių literatūrinių sugebėjimų, sugeba sukurpti laiškelį ar pardavimo sutartį. Visuomenė šioje srityje nepriklauso nuo išsilavinusio elito, tai kodėl ji turi priklausyti nuo kompiuterių specialisto?
Prieš keletą metų beveik kiekvienas, dirbantis su kompiuteriu, šiek tiek programavo. Senais laikais pasirodęs Turbo Basic sukrėtė Microsoft kaip kamuolinis žaibas - iki kaulų smegenų. Keli metai aplaidumo vos neparklupdė firmos - ji susiėmė netrukus išleido dvi naujas MS Bacic versijas. Ir taip įsivažiavo su šia kalba, kad iki šiol negali sustoti.
Taigi tais senais laikais kiekvienas ką nors žinojo apie programavimą ar bent Pascal. Pasaulis dar nebuvo padalintas į dvi - programuotojų ir vartotojų - kastas. Kiekvienas buvo ir tuo ir tuo.
Tada atėjo C!
Neaišku, kodėl C taip greitai išplito. Tai draugiška profesionalui, tačiau priešiška vidutiniokui kalba. Ją sunku išmokti. Reikia tapti vos ne meistru, kad galėtum sukurti kokią nors _naudingą_ programą. Tačiau ji sukurdavo artimas asembleriui programas, žymiai greitesnes ir mažesnės apimties, nei Pascal ar Basic. Ir dar daugiau, ji buvo nepriklausoma nuo platformos.
Šiais laikais geležis žymiai galingesnė ir programos dydis ir greitis ne tokie svarbūs. Todėl C yra stichinė nelaimė. Ji leidžia transliuoti bet ką, net visišką nesąmonę. O tai reiškia, kad programuotojui savo galvoje reikia turėti ne pastesnį kompiliatorių. Suprasti, kas parašyta, reikia daugiau laiko, nei perrašyti iš naujo.
Visai nebūtina mokytis C, kad galėtume rašyti naudingas programas. Tiesiog stebina, kaip greitai galima sukurti veikiančias ir reikalingas programytes, naudojant Visual basic ar Delphi. Jie patys žino daug apie Windows ir meniu, mygtukus ir visa kitą.
O gal tikrai?
Į ten, kur ir reikia Operacinės sistemos duomenis į diską užrašo ne iškart. Papildomai juos buferizuoja ir C kalbos paprogrėmės. Tačiau kartais yra būtina, kad, prieš atliekant kai kuriuos veiksmus, duomenys jau būtų įrašyti į diską.
16-os bitų terpėse (MS-DOS ar Windows 3.1), kuriose yra veiksni bent Smartdrv.exe 4.0 versija yra du pasirinkimai:
Kitaip yra 32-ių bitų Windows terpėse, kurios turi vidinį diskų buferizavimą. Todėl tėra vienintelis būdas - naudoti Commode.obj failą ir funkciją "fflush". Šios technikos pavyzdys:
- naudoti funkciją "_commit";<>
- prijungti Commode.obj failą ir kviesti funkciją "fflush".
#include#include void main() { DirbkSuFailu(); DirbkSuKituFailu(); } void DirbkSuFailu() { FILE * CFileBuf; // Atidaryti failą ir atlikti keletą rašymo operacijų fflush(CFileBuf); _commit(_fileno(CFileBuf)); // Keipinys į "fflush" visus buferius persiūs operacinei sistemai // Antrasis kreipinys į "_commit" privers Smartdrv.exe // užrašyti juos į diską. } void DirbkSuKituFailu() { ofstream CXXFileBuf; // Atidaryti failą ir atlikti keletą rašymo operacijų CXXFileBuf.flush(); _commit(CXXFileBuf.rdbuf()->fd()); }
Ar C++ - tai vien tik pagerintas C? Kartais C ir C++ skirtingai traktuoja simbolines konstantas ar eilutes. Pavyzdžiui, paimkim tokią programytę:
#includeJi, sutransliuota kokiu nors ANSI C kompiliatoriumi, atspausdins sizeof(int) reikšmę, t.y. dažniausiai 2 PC kompiuteriuose ir 4 - Unix mašinose.int main() { printf("Simbolio plotis:%d\n", sizeof('x')); return 0; } /* end main */ Tačiau kaip C++, ji spausdins sizeof(char) reikšmę, kuri dažniausiai yra 1. Taigi, va!
Kitas skirtumėlį parodo šis pavyzdėlis:
#includeTai leistina C, bet klaidinga C++! Simbolių eilutė baigiasi kodu '\0', o jam nėra vietos masyve. C kalboje programuotojas rizikuoja, nes kai kurios funkcijos, pvz., "printf" gali veikti kitaip, nei tikėtasi.char buf[5] = "abcde"; int main() { printf("%s\n", buf); return 0; } /* end main */