Kde je to céčko?

Když se řekne céčko tak někdo možná zavzpomíná na své úžasné zážitky na základní škole, když navštěvoval 4.C a složitě měnil pět barevných céček za jedno svítivé a má ho teď pečlivě uschované v krabičce mezi obaly od Bajo a milostnými dopisy. Někomu se zase vybaví spíše studia na vejšce. Kdy najednou nečekaně jeho kamarád Jarolím zařval: „Mám céčko!“, když předtím zuřivě klikal v elektronickém indexu. Někoho zas napadne jak leží jako lazar v posteli, cpe do sebe vitamíny a čeká na to céčko až se popere s těmi bacily jak Mach a Šebestová. Ti kdož přešli k LM z PC bez operačního systému (Windown system) zase zamáčknou slzu při vzpomínce na systémový disk, tzv. disk C. Hudebníci zase znají céčko jako základní tón u oktávy.

Až na několik výjimek je tedy céčko docela zajímavá věc a i když se to na první pohled nezdá, je i v linuxu potřeba stejně jako vitamíny jsou důležité pro lidské tělo. Linux je totiž napsaný v programovacím jazyce C. A když se vrátím k předchozímu zážitku ohledně vejšky tak tam jsem ho právě měl 🙂 Ale „Mám céčko!“ jsem neřval u indexu, ale při tlučení hlavou o zeď. Na první pokus jsem měl z céčka efko. Ale možná, že to bylo tím, že to bylo C++. Což je rozšíření jazyka C. Ale i tak ať počítám jak počítám tak C++ mi dává E. To jsem ale dostal až v dalším roce studia kam se se mnou céčko přetáhlo 😀 Ale dnes už jsem naštěstí starší, zkušenější a chytřejší takže z toho už nevím vůbec nic, ale to nevadí přesto si dnes zkusíme ukázat, že to není nic tak složitého. A to tím, že si vytvoříme vlastní jednoduchý prográmek v jazyce C.

Ze všeho nejdůležitější je nainstalovat si nějaký editor, abychom měli program krásně barevný a líbil se nám 🙂 Ostatní už je celkem o ničem a to že už třeba program nefunguje není tak podstatné. Hlavní je nadšení. Můžeme ale klidně použít běžný textový editor Pluma nebo Gedit. Já jsem si stáhnul program CodeLite ze stránek http://codelite.org/ jelikož je krásně barevný a má některé vychytávky, které běžný editor nemá.

Když už máme editor tak se podíváme jak vypadá struktura programu v C :

/*
nějaká poznámka třeba informace o tom o jaký program se jedná
*/
#include <stdio.h>

int main()

{

}

Ten šedý text mezi závorkami a hvězdičkou /* */ je interní poznámka pro programátora, kam si může psát co má dnes koupit v sámošce nebo interní poznámky o programu, include znamená, jaké knihovny nebo součásti náš program potřebuje (knihovna stdio.h je výchozí knihovna pro základní funkce) a následuje vlastní program main ohraničený ve složených závorkách {}. Int znamená, že je typu integer (číslo), ale to zatím nemusíme řešit.

Nyní si sestavíme náš první program. Nejprve si pustíme nějakou pěknou hudbu, aby se nám dobře programovalo, když už teď víme co je to ta oktáva :-). To je stejně tak důležité jako barevná písmenka, já si občas pouštím třeba toto. Tak super, hudba frčí, písmenka barví a můžeme si v editoru vytvořit nový soubor třeba prvni.c (*.c je přípona souboru v jazyce C) a použijeme funkci pro výpis na obrazovku což je funkce printf();

prvni.c

/*
vypsání textu na obrazovku
*/
#include <stdio.h>

int main()

{

printf(„Můj první program v C\n“); /*oboje uvozovky jsou horní viz. následující obrázek*/

}

V Codelite program vypadá takto:

 

Znak \n na konci textu je jen proto, aby po ukončení programu kurzor skočil na nový řádek 🙂 Pro spuštění programu je nejprve třeba provést jeho kompilaci. To znamená vytvoření spustitelného souboru ze zdrojového kódu. Pro program v jazyce C se používá kompilátor gcc. Otevřeme si terminál ve složce, kde se nachází náš program prvni.c a provedeme příkaz:

Příkaz terminálu:
gcc -o prvni prvni.c

prvni je název spustitelného programu a prvni.c je název zdrojového programu. Pokud vše proběhne OK příkaz nevypíše nic a ve složce se vytvoří soubor prvni. V opačném případě, pokud by program obsahoval chyby, kompilátor je vypíše na obrazovku (pro ukázku chybové hlášky jsem změnil funkci printf na printfx, která nenexistuje proto se mu to nelíbí).

 

 

Pokud je tedy vše OK a kompilátor nehlásí nic spustíme program příkazem :

Příkaz terminálu:
./prvni

Měl by se objevit zadaný text:

 

 

Pokud ještě nemáme můžeme si zaktualizovat gcc na verzi 4.9 :

Příkaz terminálu:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

 

Vtip je v tom, že v našem programu můžeme pomocí funkce system() používat příkazy terminálu. Vytvoříme tedy nový soubor, který se bude jmenovat ls.c lehkou úpravou původního souboru prvni.c:
ls.c

/*
vypsání obsahu aktuálního adresáře, opět je potřeba všechny uvozovky přepsat na horní
*/
#include <stdio.h>


int main()

{

system(„clear“);

printf(„Jouda hlásí obsah aktuální složky:\n“);

system(„ls“);

}

 

Opět provedeme kompilaci a program spustíme:

Příkaz terminálu:
gcc -o ls ls.c
./ls

 

Pokud jsme vše udělali správně měl by se nám zobrazit obsah aktuálního adresáře:

 

 

Všimněme si rozdílu mezi příkazem ./ls a ls :

 

 

Zatím co program ./ls spouštíme z aktuálního adresáře a jedná se o náš zkompilovaný soubor, příkaz ls je systémový. Krásné že ? 😀 Když teď koukneme do nějakých zdrojáků linuxu tak už nám to nemůže připadat tak docela neznámé:
https://github.com/torvalds/linux/blob/master/kernel/cpu.c

Nebojte se taky tomu nerozumím. Ale vidím jaké se volají knihovny a dále pak definice různých funkcí, které volají další funkce a kdybych si s tím dal tu práci tak je šance, že pochopím oč jde. A to je právě výhoda systémů jako je linux, že mají otevřený zdrojový kód a je možné dohledat co se nám v systému děje. Řeknete si asi, že prohledávat tisíce zdrojáků se stejně nedá, ale jde o to, že k tomu mají přístup miliony uživatelů takže pokud by tam bylo něco podezřelé tak si toho někdo všimne. Oproti tomu u komerčních systémů nemůžete dělat nic. Zdrojáky nezveřejní a můžete jen slepě důvěřovat výrobci. A obecně platí, že pokud se za něco nestydím tak to zveřejním 😀 Já se třeba vůbec nebojím napsat tu, že jsem prásknul kamaráda, že házel o přestávce křídou. Ten čokoládový bonbón od tříďase za to přeci stál, ne ? 🙂

Když se tedy nakonec vrátíme k původní myšlence – Kde je tedy to C ? Přeci všude kolem nás. Mějme ho rádi, vždyť i díky němu máme náš krásný LM 😀 Do komentářů mi můžete napsat jestli chcete pokračování a která písnička se Vám nejvíc líbila, mě asi ta začínající v 43:10 🙂

 

Štítky , , , , , , .Záložka pro permanentní odkaz.

13 reakcí na Kde je to céčko?

  1. kamowski říká:

    umí!
    a přidá!

    pekná práca

  2. golf33 říká:

    Super 🙂

    Díky

  3. Matěj Pokorný říká:

    Nevím, nevím, jestli bys měl pokračovat. Máš tam dost nepřesností. Namátkou třeba:

    „knihovna stdio.h je výchozí knihovna pro základní funkce“
    stdio.h je hlavičkový soubor s definicí funkcí pro práci se vstupem a výstupem programu. Knihovna je něco jiného.

    „…a následuje vlastní program main ohraničený ve složených závorkách {}. Int znamená, že je typu integer (číslo)“
    main je funkce s návratovou hodnotou typu int. Má ovšem to výsadní postavení, že pokud neřekneš jinak, volá se jako první. Mimochodem, ten tvůj program by měl na konci těla funkce main vracet nějaký číslo…

    „Ale vidím jaké se volají knihovny…“
    Knihovny se nevolají, ale přidávají. Často se nicméně používá zkomolenina inkludují 😀 .

    Aby pak takový články nebyli spíš kontraproduktivní. Navíc návodů, jak něco napsat v Cčku jsou na netu mraky…

  4. Miloš Veselý říká:

    Pěkný článek.
    Matěj Pokorný má pravdu s těmi nepřesnostmi, ale pro tento typ článku (úvod do programování zábavnou formou) se mi ty nepřesnosti nezdají důležité. Jsem pro pokračování, možná by nebylo marné vzít to trochu prakticky – přesně jako v článku – otevřeme editor, něco napíšeme, v terminálu zkompilujeme, potom spustíme. Pravda je, že popisu syntaxe je všude plno, ale právě to praktické zkoušení se hledá těžko. Začátečník se pa klidně může naučit všechny příkazy, ale nemusí vědět jak s nimi zacházet.

  5. Lotus říká:

    Hoj Hoj Hoj.

    Tak po půl hodině laborování, se mi podařilo zkompilovat a spustit první program. 🙂
    Ale nedaří se mi nastavit v codelite formátování. Tzn. abych když píšu program, tak např. aby se printf obarvil jinak. Nějaký nápad?

  6. Pavel Šamaj říká:

    Ahoj, Super článek, podobný mě kdysi naučil základy Pythonu a tak nějak už jsem u něj zůstal, rozhodně jsem pro pokračování a za tenhle alespoň Děkuji

  7. Divinek říká:

    Ahoj
    Taky dávám přednost Pythonu, ale domnívám se, že článek jako takový, byť i s nepřesnostmi, má obrovský význam a to hlavně pro amatéry a nadšence (jako já). Začátek je vždy nejtěžší a pokud člověk není zdatný v angličtině, tak až takové mraky článků o základech programování na netu nejsou. Podle mne to píšeš zábavně a přitažlivě a hlavně, hned se to dá vyzkoušet (to ve většině učebnic nastane až po dlouhém a únavném teoretickém úvodu). Že jsou tam nepřesnosti, to až tak nevadí – člověk, který se chytne a přeskáče těžké začátky, tak nakonec ty nepřesnosti sám odhalí (a toto je moc poučné – HEUREKA). Pokračuj, držím Ti v této nelehké práci palce.

    • Allconius říká:

      Ahoj, nepřesnosti jsou podle mě + protože vedou k diskuzi a když se o něčem diskutuje tak se to dostane lidem do podvědomí než když se o tom mlčí 😀 Na tom jak se co jmenuje v podstatě stejně nezáleží, důležitý je jestli víš co děláš a funguje to. Já měl třeba problém v autoškole když mi instruktor říkal jedeme vlevo a já jel vpravo. Pak člověk vypadá sice jako magor ale vysvětlení je jednoduché. Když někam jdeš tak nad tím nepřemýšlíš jestli je to vlevo nebo vpravo víš prostě že potřebuješ jít tam tím směrem. Taky pokud bude doma uklizeno a navařeno tak ať se přítelkyně klidně jmenuje třeba Ferdinand VI. 😀

  8. Bedňa říká:

    Píš ďalej, mi ťa zjebeme v komentároch 🙂

    • Allconius říká:

      OK to se vyplatí 🙂 přesvědčili jste mě a chytám múzu

  9. Allconius říká:

    No jak chceš. Tímto Tě oficiálně vyzývám na souboj na http://en.lichess.org/ 😀