| ← číselné soustavy | C/C++ | překladače → |
Vzniku velkého programu předchází spousta procesů. Nejdříve je třeba provést analýzu, návrh funkčnosti programu, uživatelského prostředí. Je třeba si rozmyslet, jak bude program vypadat, co bude jeho funkcí, pod jakými OS bude pracovat, budou-li v budoucnu potřeba nějaké změny v programu (jaké), kolik lidí bude na programu pracovat a jak dlouho, jak se bude program následně udržovat aktuální a funkční atd. Z toho pak vyplyne, jakými postupy program vznikne. Dobrou pomůckou vám při tom může být například znalost jazyka UML. Prostě, jak se říká, dvakrát měř, jednou řež. Já se zde ničím podobným zabývat nebudu, není to obsahem tohoto výukového textu. Zde se dozvíte pouze to, jak program „naprogramovat“.
Jak jsme si řekli v minulé kapitole, program je soubor s daty a instrukcemi. Dříve se programovalo pomocí děrovacích štítků, ovšem s příchodem nových periférií, jako klávesnice a monitor, vznikaly i nové způsoby programování. Teď si vysvětlíme některé pojmy, které s tím souvisejí.
Prvním důležitým pojmem je zdrojový kód programu.
Zdrojový kód programu není nic jiného, než hromada textových souborů,
v nichž je zapsáno pomocí programovacího jazyka (nikoliv tedy
pomocí českého nebo anglického jazyka) co má program dělat.
Překladač (angl. compiler) je program, který si přečte
zdrojový kód a vytvoří z něj program.
Odjakživa bylo snahou vytvořit takový programovací jazyk, který
by byl co nejjednodušší na pochopení a naučení se pro člověka a zároveň, aby
bylo proveditelné vytvořit překladač, který by takovému jazyku porozuměl
(proto, alespoň zatím, nelze psát zdrojové kódy v lidské řeči, musí se na to
vymyslet speciální jazyk – programovací jazyk).
Bylo vytvořeno mnoho různých programovacích jazyků a k nim samozřejmě mnoho překladačů (co jazyk, to překladač(e)).
Mezi prvními programovacími jazyky byl assembler. Pomocí tohoto jazyka se přímo zapisovali instrukce procesoru. Například sečtení dvou čísel v assembleru může vypadat takto:
MOV AX,a
MOV BX,b
ADD AX,BX
MOV a,AX
AX a BX je označení registrů procesoru, „a“ a „b“ jsou proměnné, které obsahují nějaká čísla. MOV je instrukce která data přesune (nejdříve data z „a“ do AX, pak z „b“ do BX ...) a ADD je instrukce, která přičte druhé číslo k prvnímu (tj. k AX přičte BX). Překladač assembleru tento zdrojový kód převede do binárního kódu (tedy programu), který je již procesoru srozumitelný.
Později vznikly vyšší programovací jazyky, mezi něž patří i jazyk C, které již nepracovali přímo s instrukcemi procesoru. Předchozí kód se v jazyce C zapíše následovně:
a = a+b;Nyní je již na překladači, aby tento zápis převedl do procesoru srozumitelných instrukcí. Pro vyšší programovací jazyk mohou existovat překladače, které zdrojový kód přeloží do binárního kódu srozumitelný různým procesorům (a také pro různé OS).
Překladače (a vývojová prostředí) si probereme v další kapitole.
Přenositelnost programu je pojem, který nám říká, kde všude náš program poběží. Například program pro Windows 3.11 poběží i pod Windows 95, ale nepoběží pod Linuxem. Program pro 32-bitová Windows poběží při troše štěstí i pod 64-bitovými Windows, ale program pro 64-bitová Windows pod 32-bitovými Windows nepoběží.
Přenositelnost programovacího jazyka je vlastnost, která jednoduše určuje, na kterých platformách lze zdrojový kód tohoto jazyka přeložit. Jinak řečeno, pro které platformy (operační systémy a procesory) existuje překladač. Čím více existuje překladačů pro různé procesory a OS, tím je program "přenositelnější". V tomto ohledu patří jazyk C k jednomu z nejlepších. Ještě lepší je Java, která vám poběží nejenom na PC, ale třeba i na mobilním telefonu :-). Java, mimochodem, vychází z jazyka C, jako ostatně spousta dalších moderních programovacích jazyků. (Takže pokud se naučíte programovat v C/C++, bude vám syntaxe Javy povědomá.) Překladače pro různé platformy vytvářejí různí lidé, či organizace, proto vznikají standardy jazyka, které říkají, čemu všemu musí překladač rozumět. Pokud se standardů budete držet, bude váš zdrojový kód přenositelný.
Bohužel, v počátcích vývoje jazyka C žádný standard neexistoval. Standardy se také postupem času mění a podpora toho či onoho standardu je v tom či onom překladači na různé úrovni. Jazyk C se už dlouho nevyvíjí, proto by jeho podpora měla být v překladačích na vysoké úrovni. Existuje standard ANSI C vytvořený organizací pro „americký standard“ www.ansi.org a z něj odvozený ISO/IEC 9899:1999 vytvořený organizací pro mezinárodní standard www.iso.org. Odvážnější z Vás si mohou stáhnout „Logický výklad standardu C99“ v angličtině.
Přenositelnost zdrojového kódu je dána přenositelností programovacího jazyka a dodržováním standardů. Některé překladače totiž umí „něco navíc“, co obvykle usnadňuje psaní zdrojového kódu, ale snižuje přenositelnost. Další faktor, který má vliv na přenositelnost zdrojového kódu je používání knihoven. Knihovny jsou soubory obsahující funkce, které může váš program využívat jejich voláním. Za roky vývoje jazyka C bylo vytvořeno mnoho knihoven a jejich používáním si ušetříte velkou spoustu času. Existují standardní knihovny, které jsou dostupné na všech podporovaných platformách. Například knihovny pro práci se soubory. Některé takové knihovny budeme probírat. Jiné knihovny jsou však dostupné jen na některých platformách. Tak třeba pokud budete chtít naprogramovat nějakou aplikaci v systému Windows a využívat přirozené grafické prostředí Windows, tj. všech těch pěkných tlačítek, rozbalovacích menu, přepínačů, okének atp., budete k tomu využívat knihovny Windows, které, pochopitelně, jinde než na Windows nenajdete. Váš program se tak stane na Windows závislý. Existují knihovny pro grafické uživatelské rozhraní (angl. zkratka GUI), které jsou přenositelné například mezi Windows a Linuxem, ale zase nejsou přenositelné nikde jinde a uživatel takového programu si na první pohled všimne, že to vypadá a chová se jinak. Je to dáno tím, že standard jazyka C (ani C++) nezahrnuje GUI (na rozdíl třeba od Javy, která GUI má. Díky tomu můžete v Javě psát snadno přenositelný program s GUI, ovšem za tu cenu, že všude bude vypadat stejně – ošklivě.).
Programovací jazyk C je známý svou přenositelností a rychlostí. Byl navržen jako poměrně malý jazyk, kombinující efektivitu a výkonnost. Byl vytvořen v Bellových laboratořích AT&T Denisem Ritchiem v létech 1969 až 1973. Dále se na vzniku jazyka podíleli Brian Kernighan a Ken Thompson. Byl napsán pro snadnou přenositelnou implementaci Unixu (Unix je OS, na jehož základě se později vyvinul Linux). Postupem času vznikla ANSI (American National Standard Institute) norma jazyka C. Shodný standard definuje ISO (International Stnadards Organisation) norma. Proto se někdy uvádí spojení ANSI/ISO norma. Pokud budete ANSI normu dodržovat, máte velkou šanci, že budete moci svůj program přenášet na různé platformy.
Jazyk C++ je pokračovatelem jazyka C (jehož vývoj se již téměř
zastavil). Nejdříve byl označován jako C with Classes, od roku 1983 C++.
Vyvinul jej Bjarne Stroustrup v AT&T.
Jazyk C++ přináší novinky, především OOP (objektově
orientované programování). Pojem OOP si vysvětlíme až dojde na C++.
První oficiální norma jazyka C++ byla přijata v roce 1998.
Tolik stručně z historie. Pokud by vás zajímala více, na internetu jistě najdete
podrobnější informace o historii.
Jak jsme si řekli dříve, program vytváří ze zdrojového kódu překladač. Podívejme se tedy nejdříve na to, jak vypadá takový zdrojový kód v jazyce C. Připomínám, že si pro tento kurz můžete stáhnout všechny zdrojové kódy. Název souboru, ve kterém je zdrojový kód uložen jsem vždy napsal do komentáře na začátek zdrojáku (Takže první zdrojový kód najdete v souboru hello.c)
1: /*------------------------------------------------*/ 2: /* hello.c */ 4: #include <stdio.h> 6: int main(void) 7: { 8: printf("Hello World\n"); 9: return 0; 10: } 11: /*------------------------------------------------*/
Tak málo stačí napsat k tomu, aby jste mohli vytvořit kompletní funkční program. Jak snadné, že? Čísla na začátku řádku nejsou součástí kódu, jsou zde jen pro to, abych se na ně mohl odkazovat v textu (na řádku 2 vidíte název souboru). Význam všeho ostatního si vysvětlíme někdy později. Program vytvořený z tohoto zdrojového kódu neudělá nic jiného, než že vytiskne na obrazovku (v „textovém režimu“, tj. například v DOSu nebo linuxové konzoli) „Hello World“ a konec řádku.
V C++ se předchozí program zapíše takto:
1: /*------------------------------------------------*/ 2: /* hello.cpp */ 4: #include <iostream> 6: int main(void) 7: { 8: std::cout << "Hello World\n"; 9: return 0; 10: } 12: /*------------------------------------------------*/
Kód jazyka C můžete přeložit pomocí překladače jazyka C++, ale zdroják C++ již jen pomocí překladače C++. Překladač jazyka C nezná (by neměl znát) operátor <<. Tím vás nechci nabádat, aby jste používali na jazyk C překladač jazyka C++, protože (v tom lepším případě) by vás mohli obtěžovat zbytečné varování překladače.
Zdrojové kódy v jazyce C se zapisují do souboru s příponou .c a v jazyce C++ s příponou .cpp. Některé překladače vyžadují místo cpp příponu cc (nejen shodnout se na příponě zdrojových kódů bylo pro tvůrce překladačů nadlidský úkol).
| ← číselné soustavy | C/C++ | překladače → |
