====== Ahoj, světe! ====== Tzv. "Ahoj, světe!" (v originále "hello, world") je jednoduchý program, který prostě jen vypíše "hello, world", ten je sám o sobě prakticky k ničemu, ale pro programátory je důležitý protože se naučíme jak vypadá program, který nic vlastně nedělá, jak se zkompiluje a spustí, tedy všechny formality, které nás dělí od vlastního programování. A takto tedy vypadá hello world v C: #include int main(int argc, char *argv[]) //Pro primitivni programy muzeme pouzit jen: int main(void) { //Toto je komentar /* * A toto je * viceradkovy komentar */ printf("hello, world\n"); return(0); } Tento text uložíme pomocí nejobyčejnějšího textového editoru do souboru s příponou .c (tedy např.: "hello.c"). Na konci souboru musí být minimálně jeden prázdný řádek a soubor nesmí končit v otevřeném komentáři tedy např.: "/*Za touto vetou bude konec souboru". Jinak kompilátor (nebo spíše preprocesor) nahlásí chybu. ===== Rozbor prvního programu ===== Po kompilaci a spuštění tohoto programu začne počítač vykonávat naše příkazy tak, jak jsou napsány ze shora dolů, z leva do prava. Teď si ukážeme co program udělá krok za krokem, řádek po řádku: #include To není příkaz, který by se prováděl při spuštění programu, ale ještě před kompilací. Jde o tzv. "direktivu preprocesoru" (začínají # - křížkem), preprocesor je program, který připraví náš kód pro kompilátor (odstraní nepotřebné mezery, prázdné řádky, rozvine makra,...). Direktiva preprocesoru #include způsobí to, že bude nahrazena obsahem souboru "soubor", čili na začítek našeho programu se vloží soubor stdio.h, který obsahuje především funkce na práci s příkazovým řádkem a soubory. Pokud je jméno souboru ve špičatých závorkách (#include ), hledá se soubor v adresáři pro hlavičkové soubory, který je součástí kompilátoru, pokud bychom napsali jméno souboru mezi uvozovky (#include "soubor"), preprocesor by hledal soubor ve stejném adresáři, jako se nachází náš program. int main(int argc,char *argv[]) { /*Nase prikazy...*/ } Toto je deklarace funkce main, funkce main je první funkce, která je zavolána po spuštění programu, jinými slovy příkazy uvedené ve složených závorkách ({}) budou provedeny neprodleně po spuštění našeho programu. Klíčové slovo "int" před jménem funkce říká, že funkce vrací integer (tedy celé číslo). Dvě proměnné nadeklarované v závorkách za jménem funkce (int argc, char *argv[]) se používají k získání parametrů od našeho OS, jde o argumenty z příkazové řádky (nebo třeba jména souborů přetažená na ikonku našeho programu). přičemž celé číslo argc obsahuje počet parametrů a pole řetězců (polí znaků) argv[] obsahuje text těchto argumentů. /* Komentáře */ Vše, co je umístěno mezi /* a */ (v našem příkladu můžete vidět zdobnější zápis s hvězdičkou na každé řádce, to zůstává na fantazii programátora...) bude ignorováno, můžeme to tedy použít pro popisování našich programů (to je velmi důležité, jinak se v našem programu ztratíme). Také můžeme použít komentář pomocí // , kdy vše od // až do konce řádku je ignorováno. printf("hello, world\n"); Tento řádek vypíše na obrazovku text "hello, world" a přejde na nový řádek ("\n" značí newline dle zvyku na vašem OS, tj. ekvivalent enteru). Funkce printf() je nadefinovaná v souboru stdio.h (viz. výše) a jako první parametr přijímá text, který chceme vypsat, nebo formátovací řetězec. Tímto prvním argumentem je vždy řetězec (např. text v uvozovkách). Pokud bychom chtěli vypsat uvozovku, musíme použít \" pokud lomítko, tak \\ a pokud znam procenta, tak %%. Všiměte si, že deklarace, definice a volání funkce (náš případ) musí končit středníkem (;), nikoli však novým řádkem, stačí mezera, nebo tabelátor. return(0); Jde opět o volání funkce. Funkce return() (jména funkcí píšeme standartně s () na konci, aby bylo na první pohled jasné, že jde o funkci) způsobí to, že je funkcí, ze které je zavolána (v našem případě main()), vrácena hodnota zadaná jako první parametr této funkce return(). Pokud toto zavoláme z funkce main, znamená to pro nás ukončení programu s návratovou hodnotou 0. Návratové hodnoty jsou čísla (int main(), tedy funkce main() je typu integer == celé číslo), které programy předávají operačnímu systému po skončení, aby měl přehled o úspěšnosti vykonání programu (0 znamená bez chyby a obecně pak platí, že čím vyšší číslo, tím horší chyba). Pokud program dojde na konec kódu funkce, je automaticky navrácena hodnota 0, pokud to není změněno pomocí funkce return(); ===== Co budeme potřebovat pro psaní a spuštění programů v C ===== V první řadě budeme potřebovat plaintextový editor (jsme začátečníci a budeme tedy raději konzervativní, takže kódovani utf-8, nebo cp-1250, raději žédné wide-chary a už vůbec ne textové editory typu Word!!!). Naopak se nám hodí editor se zvýrazněnou syntaxí a jinými "vychytávkami", které nám mnohonásobně usnadní psaní kódu a například nám i napovídá, jeden z nejlepších nejuniverzálnějších editorů je SciTe (na enginu Scintilla). Můžeme použít například editory dostupné pro náš OS Microsoft: * SciTe (doporučuji) * PSPad (nedoporučuji) * notepad Unixy: * SciTe (doporučuji) * nano (doporučuji pro příkazový řádek) * mcedit (balíček mc) * vim Potom budeme také potřebovat program, který převede námi psaný a čitelný strojový kód na strojový kód tj. procesorem čitelné instrukce (ty se ukládají v binárním spustitelné souboru čitelném operačním systémem). A samozřejmě standartní knihovny ANSI C (verzi pro vývojáře). Na platformách od Microsoftu to znamená instalci jednoho z těchto balíčků * MinGW (gcc, g++) - (doporučuji) * Borland C Compiler Na Unixových platformách pak pravděpodobně potřebujeme tyto balíčky * gcc * g++ (pokud máme zájem také o C++) * libc-dev (poslední verze) Nebo můžeme sáhnout po celých IDE (Integrované vývojové prostředí) Jde o jakýsi balíček Vše-V-Jednom. To v praxi znamená potřebný editor uživatelsky přívětivě spolupracující s kompilátorem, jinými slovy nainstalujeme jeden balíček programů místo všech výše zmíněných. Ze všech IDE pro Unixy i MS systémy je pro nás nejvýhodnější multiplatformní IDE Dev-C++ (dev-cpp) - (doporučuji). Pro jednotlivé systémy existují samozřejmě i další IDE: Na Windows máme např. * C++ Builder * Microsoft Visual Studio (nebo Visual C++) Na Unixech pak stojí za zmínku * Eclipse (s pluginem pro C) * NetBeans (s pluginem pro C) * Anjuta * KDevelop ===== Samostatné cvičení ===== * Vyberte si jedno z freewarových řešení dle výběru vyučujícího (Dev-C++, nebo SciTe s gcc/g++). * Vyhledejte si ho pomocí Googlu, stáhněte a nainstalujte ho na váš počítač. * Vyzkoušejte si kompilaci a spuštění našeho prvního programu (Hello, world!). * Vyzkoušejte si práci s editorem, zvýraznění syntaxe a případně automatické dokončování kódu. * Pokuste se náš program zkompilovat podruhé, ale v kódu změňte text, který se bude vypisovat na obrazovku. Následující body platí i pro všechna budoucí cvičení: * Veškeré problémy se pokuste vyřešit nejdříve pomocí Googlu, případně pomocí manuálu dodaného s produktem. * V případě neúspěchu se obraťte na vyučujícího.