Tue Oct 3 22:05:51 CEST 2006 2. Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, ktoré si postupne rozoberieme: dátové typy príkazy bloky funkcia main 2.1.1 Dátové typy V jazyku C sa dajú použiť tri základné dátové typy: char - reprezentuje znak, ktorý má veľkosť 1 byte int - reprezentuje celé číslo float - reprezentuje reálne číslo double - reprezentuje reálne číslo s väčším rozsahom a presnosťou Ich rozšírenie (vzhľadom na presnosť, resp. na rozsah) môžeme pomocou kľúčových slov jazyka dodefinovať na: short int - menší rozsah čísel ako int long int - väčší rozsah čísel ako int long double - väčší rozsah čísel ako int Pre presné hodnoty je vhodné použiť operátor sizeof, ktorý vráti počet bajtov, ktoré sa vyhradili pre daný dátový typ. Tieto hodnoty sú závislé od platformy. Jazyk C povoľuje definovať premenné, ktoré sú tzv. znamienkové (signed) alebo neznamienkové (unsigned). Ak by sme napríklad definovali premennú typu unsigned int, tak táto premenná by mala rozsah v intervale nezáporných čísel. signed char - rozsah takéhoto typu je <-128, 127> unsigned char - rozsah daného typu je <0, 255>
2.1.1.1 Definícia, deklarácia a inicializácia Mnoho ľudí si mýli pojmy definícia a deklarácia premennej, funkcie. Definícia - vyjadruje vyhradenie konkrétnej časti pamäte počítača. Povedzme, že si zadefinujeme premennú typu int. Na to, aby táto premenná bola schopná udržovať nejaké hodnoty v pamäti, je nutné alokovať (vyhradiť) časť pamäte - definovať kde sa bude daná premenná v pamäti nachádzať. O túto prácu zavedenia premennej do pamäte počítača sa stará operačný systém. 1. definícia Deklarácia - nevyhradzuje konkrétnu pamäť. 2. deklarácia int *a; //daná premenná je tzv. ukazovateľom (pointer) na typ int, o ukazovateľoch sa budeme učiť neskôr Inicializácia - priradenie konkrétnej hodnoty premennej. 3. inicializácia a = 5; Poznámka: pri druhom príklade nie je možná inicializácia ukazovateľa až dovtedy, kým nevyhradíme pamäť pre daný ukazovateľ, ale pri prvom príklade by sme pokojne mohli inicializovať premennú a. 2.1.1.2 Konštanty (celočíselné, reálne, znakové, reťazcové) Priradenie celočíselnej hodnoty: a = 14; //priradenie hodnoty 14 a = 016; //priradenie hodnoty 14 v osmičkovej (oktánovej) sústave a = 0xE; //priradenie hodnoty 14 v šestnástkovej (hexadecimálnej) sústave Priradenie reálnej hodnoty: float a; a = 3.1415f; a = 3e5f; double a; a = 3.1415678; a = 357e-9; Priradenie znaku:
char a; a = '$'; //je dôležité si všimnúť, že sú použité jednoduché úvodzovky Priradenie reťazca: char a[] = "Hi, it's a nice day, isn't it?"; //pri reťazci sú dvojité úvodzovky 2.1.2 Príkaz Príkaz sa v jazyku C označuje bodkočiarkou, čo znamená, že za každým príkazom musí byť bodkočiarka - ;. Ak chceme napríklad definovať naraz viac premenných, tak môže príkaz vyzerať nasledovne. int a = 0, b, c = 10; 2.1.3 Blok V jazyku C sa telá funkcií, podmienok, cyklov, štruktúr uzatvárajú do zložených zátvoriek a vytvárajú bloky. Začiatok bloku je označený ľavou zloženou zátvorkou a blok sa ukončuje pravou zloženou zátvorkou. Pri novom bloku sa nasledujúci kód posunie o TABULÁTOR doprava. Toto pravidlo uľahčuje prehľadnosť a čitateľnosť kódu. bloku: a = 5; a = a + 10; 2.1.4 Funkcia main() Každý program napísaný v jazyku C má funkciu, ktorá sa zavolá ako prvá pri spustení daného programu. Táto funkcia má názov main a v programe sa musí nachádzať práve raz. Aj napriek tomu, že funkciám v jazyku C sa budeme venovať neskôr, je nutné spomenúť, že funkcia môže mať (ale nemusí) vstupné parametre a návratovú hodnotu. 2.1.4.1 main bez návratovej hodnoty Ak nemá funkcia main návratovú hodnotu, tak sa táto skutočnosť musí oznámiť kľúčovým
slovom void. void main() 2.1.4.2 main s návratovou hodnotou Ak má funkcia main návratovú hodnotu, tak sa v jej tele musí nachádzať príkaz return, ktorým sa daná funkcia ukončí a vráti príslušnú hodnotu. Väčšinou budeme používať tento typ zápisu funkcie main, pretože je vhodné "povedať" operačnému systému, že náš program skončil bez chyby - vrátil hodnotu 0. int main() 2.1.4.3 main bez parametrov Funkcia bez parametrov môže ale nemusí mať v zátvorkách kľúčové slovo void. Väčšinou budeme písať programy, kde bude funkcia main bez parametrov. //kľúčové slovo je tu len na ukážku, nemusí tam byť, pretože pri prázdnych zátvorkách tam je //implicitne int main(void) 2.1.4.4 main s parametrami Použitie funkcie main s parametrami je vhodné vtedy, keď chceme odovzdávať programu vstupy z príkazového riadku. V takomto prípade musí funkcia main obsahovať dva parametre. Prvý argc hovorí o tom, koľko parametrov sme zadali a argv obsahuje samotné hodnoty parametrov. Prvý parameter je implicitne názov programu.
int main(int argc, char *argv[]) Predstavme si, že by sme spúšťali nasledovný program s parametrami mount /dev/hdb5 /mnt/d potom by boli hodnoty argc, argv nasledovné argc -> 3 argv[0] -> mount argv[1] -> /dev/hdb5 argv[2] -> /mnt/d