Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 CZ.1.07/1.5.00/34.1076 Pro vzdělanější Šluknovsko 32 - Inovace a zkvalitnění výuky prostřednictvím ICT 0202 Ing. Vladimír Ďurči LINUX VY_32_INOVACE_0202_0306 Jazyk C/C++, typy proměnných [3/6] JAZYK C - OS LINUX Vytvořeno 4. 6. 2013 Určeno pro Operační systémy 4. ročník, maturitní obor Přílohy Přiložené textové soubory, a zpracované programy IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C 1 Lekce 6
J a z y k C / C + +, t y p y p r o m ě n n ý c h Obsah lekce: Úvod - Cíle... 1 První program... 2 Základní typy... 3 Otázky k opakování 4 Lab 5 2
Ú v o d - C í l e Úvod Úvodní lekce seriálu o programování v C a C++. Podíváme se na historii a základní vlastnosti jazyka C. Cíle Cílem není formální popis jazyka, ale praktický návod se spoustou příkladů. Projdeme syntaxi jazyka, standardní knihovny i běžné postupy při programování v C/C++. Specifikům programování pod Unixem a navazujícímu software se budeme věnovat pouze v nezbytné míře. Začneme jazykem C, neboť C++ z něj vychází, vzniklo především přidáním nových konstrukcí do C a jen několika jinými drobnými změnami, takže slušně napsaný program v C je zároveň i v C++. P r v n í p r o g r a m Napíšeme jednoduchý program, přeložíme ho a spustíme. První program Učebnice programovacího jazyka většinou začínají jednoduchým příkladem, programem, který vypíše řetězec na standardní výstup. V Céčku vypadá takhle: #include <stdio.h> int main (void) { puts("ahoj světe!"); return 0; } Kód uložíme do souboru priklad.c, přeložíme příkazem $ cc priklad.c -o priklad a můžeme spustit $./priklad Ahoj světe! $ Pokud používáte nějaké IDE, obvykle musíte založit projekt a v něm vytvořit nový soubor s naším příkladem. Překlad a spuštění už budou záležitostí jednoho příkazu v menu. Nyní přiklad alespoň zběžně vysvětlím. Jazyk C je založený na funkcích. Funkce je souvislý kus kódu, může mít nějaké parametry a případně návratovou hodnotu, obojí je popsáno v hlavičce. Druhou částí funkce je její implementace. Funkce můžeme psát sami nebo můžeme použít ty z knihoven. Prvním řádkem #include <stdio.h> si zpřístupníme některé funkce ze standardní knihovny, ale využijeme jen jednu a sice puts. Zbytek programu je tvořen funkcí main, kterou musíme napsat sami. Je to zvláštní funkce, která se zavolá 3
po spuštění programu a odpovídá tak hlavnímu programu v některých jiných jazycích, například Pascalu. Začíná hlavičkou, kde je popsán typ návratové hodnoty, jméno funkce a parametry. int main(void) Naše funkce vrací int, celé číslo, které se použije jako návratová hodnota celého programu. Nula se obvykle vrací, pokud program skončil bez chyby. Na Unixu si to můžete ověřit v shellu třeba takhle: $ if./priklad; then echo "v pořádku"; else echo "chyba"; fi Za jménem main následují v kulatých závorkách parametry. Já jsem použil jednodušší a méně obvyklý způsob deklarace main, při němž je funkce bez parametrů, což jsem zdůraznil klíčovým slovem void. Druhou, běžnější syntaxi, která zpřístupní parametry programu si ukážeme v dalších dílech seriálu. Vstupním bodem nativních programů ve Windows API není main, ale WinMain nebo DllMain, což se standardním Céčkem moc nesouvisí. Naštěstí i ve Windows lze vytvářet konzolové aplikace, kde program začíná v main. Tělo funkce je ve složených závorkách, tvoří ho dva příkazy. Prvním se volá funkce puts - výpis řetězce a následuje ukončení main a tím i celého programu příkazem return s návratovou hodnotou nula. Shrnutí Z á k l a d n í t y p y Základní typy V Céčku jsou základními typy pouze čísla. Mají různou velikost a mohou být celočíselná nebo reálná a znaménková nebo bez znaménka. celá znaménková celá bez znaménka Reálná signed char unsigned char float short unsigned short double int unsigned long double long unsigned long - Tabulka vypadá na první pohled složitě, ale pojmenování má svojí logiku. Celočíselné typy se jmenují char, short, int a long. Místo short a long lze napsat také short int a long int. Až na char (kde to norma C nespecifikuje) jsou všechny implicitně znaménkové, explicitně to dá určit klíčovými slovy signed a unsigned. Například místo long tak můžete napsat signed long nebo i signed long int. Velikost typu v bytech lze zjistit operátorem sizeof. Vždy platí, že odpovídající znaménkové a bezznaménkové typy jsou stejně velké, dále C zaručuje, že sizeof(char) je jedna. Spolehnout se také můžeme, že sizeof(short) <= sizeof(int) <= sizeof(long) 4
Konkrétní velikosti norma C nespecifikuje. Typ int by měl být nejchutnější pro danou architekturu, od dob MS DOSu, kde byl int dvoubytový, vesměs platí, že sizeof(int) == 4, ale je dobré vědět, že to Céčko nezaručuje. V N bitech lze uchovat 2 N různých hodnot, tím je dán i rozsah jednotlivých typů. Znaménkové reprezentují celá čísla od - 2 8 * sizeof(typ) - 1 do 2 8 * sizeof(typ) - 1-1 a bezznaménková od 0 do 2 8 * sizeof(typ) - 1-1 včetně. V případě reálných typů můžeme použít float, double a long double, rozsah a přesnost závisí na implementaci. Úsporný, ale málo přesný a s malým rozsahem je float, naopak long double je velký, ale zato přesnější a s velkým rozsahem. Typ double je někde uprostřed. Vypadá to celé dost složitě, ale v praxi se obvykle používá int a double, s nimi nejčastěji pracují i knihovní funkce. Céčko nemá specifický typ pro boolovské hodnoty Ano/Ne, zde se používá int, nula znamená Ne a jakákoli jiná hodnota (nejčastěji 1) Ano. Jako znak (písmeno) se používá char, aniž bychom specifikovali, zda je signed nebo unsigned. Jelikož char je zároveň číselný typ, můžeme se znaky počítat i bez explicitní konverze na ASCII hodnotu. Shrnutí V jazyku ANSI C jsou definovány následující standardní typy: char int - obvykle jedna slabika (byte) pro uchování jednoho znaku. - celé číslo, (obvykle dvě slabiky) float - racionální číslo (obvykle čtyři slabiky) double - racionální číslo dvojnásobné přesnosti Slovo obvykle" v uvedených příkladech se vztahuje na větąinu implementací. Konkrétní rozsahy pro jednotlivé datové typy jsou uvedeny v hlavičkových souborech limits.h a float.h, které jsou součástí každé implementace. Kromě toho existují v jazyce C modifikátory short tj. "krátký", long tj. "dlouhý", signed tj. se znaménkem a unsigned tj. bez znaménka, kterými lze standardní typy modifikovat. Ne vąechny kombinace jsou ovšem povoleny. Pokud je nějaká kombinace povolená, potom lze zapisovat klíčová slova v libovolném pořadí. K modifikátorům patří i klíčové slovo const. Identifikátoru označenému v definici tímto modifikátorem se zároveň přiřadí hodnota; identifikátor se stává tzv. symbolickou konstantou. Příklady: const float PI=3.141593; /* definice symbolicke konstanty */ const L=3; /* definice celociselne symbolicke konstanty */ const int K=235; /* definice celociselne symbolicke konstanty */ short i=0; /* definice zkracene celociselne promenne */ short int j=1; /* definice zkracene celociselne promenne */ long int m=12345678; /* definice dlouhe celociselne promenne */ unsigned int n; /* definice nezaporné celociselne promenne */ unsigned nm; /* definice nezaporne celociselne promenne */ V následující tabulce jsou uvedeny povolené kombinace klíčových slov pro základní datové typy s typovými modifikátory a jejich zkrácené ekvivalentní vyjádření: signed char (většinou totéž co char, závisí na implementaci!) unsigned char int = signed = signed int short = short int = signed short = signed short int 5
unsigned short = unsigned short int long = long int = signed long = signed long int unsigned long = unsigned long int float double long double Z uvedené tabulky je patrné, ľe některá klíčová slova se pokládají za implicitní ( int, signed). Konkrétní rozsahy pro jednotlivé datové typy jsou rovněž uvedeny v hlavičkových souborech limits.h a float.h. Uveďme proto pouze, ľe typ short nemůže být deląí a typ long nemůže být kratší než typ int. 6
O t á z k y k o p a k o v á n í 1. Uveďte aspoň tři nejpoužívanější textové editory v OS Linux! 7
L a b Štábní kultura a velký projekt co to je? Odpověď: Abychom ve svých souborech (velké programy jsou složeny až z desítek zdrojových souborů) snadno orientovali, je dobré dodržovat následující zásady: Jméno zdrojového souboru by mělo být jednoznačné Sestává-li program z více souborů, pak prvních několik písmen jména označuje projekt (velký program), další pak modul tohoto projektu, např. edi_klavesnice.c, edi_obrazovka.c, edi_tiskarna.c označují soubory s projektu editoru, a jejich účel je zřejmý z druhé části jména souboru. Vlastní program začíná vždy hlavičkou podobnou této: /* * asci.c v 1.0 jméno souboru a verze * * Výpis ASCII tabulky stručný popis programu * * P. Herout 19. 8. 07 autor a datum vytvoření *. 8