C/C++ (31) - Jazyk C++, historie, charakteristika, vztah k C
Ve druhé části našeho seriálu se budeme věnovat C++. Dnes se stručně podíváme na vývoj jazyka, základní vlastrnosti a především jeho vztah k jazyku C. Napíšeme a přeložíme první program.
9.1.2006 06:00 |
Jan Němec
| Články autora
| přečteno 28971×
Historie C++
C++ navrhl Bjarne Stroustrup. Příčinou byla jeho negativní zkušenost
z disertační práce, jež obsahovala program v jazyce Simula. Tento
(na svou dobu velmi moderní) objektově orientovaný jazyk mu umožnil
efektivní analýzu problému a vývoj programu, ale pro použití na reálných datech
byl příliš pomalý. Alternativu poskytovaly nižší jazyky, zejména BCPL -
prapředek dnešního C. Ty byly dostatečně rychlé, ale neumožnily dostatečně
přirozený návrh a tím i efektivní vývoj programu.
Později v Bellových laboratořích řešil Stroustrup podobný problém jako ve své disertační
práci. Navrhl a implementoval proto jazyk, který měl být stejně efektivní a
přenositelný jako C, umožnil vytváření knihoven, kombinování s jinými jazyky
(C, Fortran, ...), ale zároveň měl obsahovat podporu pro objektově orientované
programování. Tento jazyk se jmenoval C with Classes, umožnil do C přidat
simulovské třídy a překládal se pomocí
speciálního preprocesoru Cpre do čistého C. Důvodem byla především dostupnost
a efektivita jazyka C, navíc nebylo nutné psát pro každou platformu zvlášť
generátor kódu. V dalších verzích se nový jazyk přejmenoval na C++ a překladač
na Cfront. Překladač byl postupně uvolněn pro školy, později vyšla i komerční
verze. Zároveň s překladačem se podstatným způsobem vyvíjel i samotný
jazyk,
úpravami prošel návrh objektově orientovaného programování, přidaly se výjimky,
šablony a prostory jmen. Neoficiální normou se stala kniha The C++ Annotated
Reference Manual z roku 1990. Organizace ANSI a ISO začaly postupně vyvíjet
standard. Jednotlivé verze návrhu standardu uvolňovaly, aby mohli výrobci překladačů implementovat změny.
Standard byl schválen v roce 1998.
Dnes existuje celá řada překladačů, pro nás bude nejzajímavější podpora
C++ v gcc, na Windows se nejčastěji setkáme s překladačem firmy Microsoft,
případně Borland.
Co je v C++ nové
Kromě několika drobných omezení a poměrně málo významných rozšíření najdeme
v C++ navíc především podporu objektově orientovaného programování (OOP),
možnost psát šablony s nimiž můžeme nějakou funkci nebo třídu parametrizovat
typem a zpracování chybových stavů pomocí výjimek. Za zmínku stojí také
prostory jmen a přetěžování funkcí a operátorů. Nejdůležitější novou vlastností je určitě
podpora OOP. Při správném návrhu vyvíjeného programu podle ideologie OOP je
v C++ určitě menší riziko konfliktu identifikátorů, menší množství paměťových
chyb typu n + 1 (vyvážené spoustou nových a stejně nebezpečných chyb spojených
s OOP). Je-li vyvíjen program, který řeší problém, jež je už "od přírody"
a nikoli násilným návrhem objektově orientovaný, pomůže v C++ OOP na úrovni
syntaxe jazyka k čistšímu kódu méně náchylnému na chyby. Někteří lidí soudí,
že používání výjimek v C++ zjednoduší (zlepší) oproti C zpracování chybových
stavů.
Co je v C++ při starém
C++ se snaží být s C v maximální rozumné míře zpětně kompatibilní, takže
většina dobrých vlastností a problémů C se přenáší i do C++. Záleží ovšem
na stylu práce programátora. I C++ umožňuje víceméně přímý přístup do paměti
bez omezení, ale správně použité OOP poskytuje oproti C vyšší formu abstrakce
nad pamětí jako polem bytů, takže riziko paměťových chyb je přeci jen trochu
menší.
C++ sice má i vlastní standardní knihovnu (a rovněž celá řada jiných,
především GUI knihoven je určena výhradně pro C++), ale běžně se používá
také standardní knihovna jazyka C a podobná sada ostatních knihoven. I zde
tedy znalosti C využijeme.
Vztah mezi C a C++
Jazyk C++ vznikl především převzetím jazyka C, z o něco menší části přidáním
nových možností, a úplně nejméně omezeními a změnami jiného druhu.
V případě omezení se vždy jedná o nějakou vlastnost jazyka C, jejíž využívání
je považované za špatný programátorský návyk.
Ohledně přenositelnosti na úrovni zdrojového kódu z toho vyplývá následující:
- Rozumně napsaný program v C půjde přeložit i překladačem C++.
- Je možné napsat program v C, který překladačem C++ přeložit nepůjde.
- "Správně" napsaný program v C++ nepůjde přeložit překladačem C.
- Je možné napsat program v C++, který překladačem C přeložit půjde.
Je také možné v jednom projektu oba jazyky na binární úrovni kombinovat a spojovat přeložený
kód, kde na některé zdrojové soubory použijeme překladač C a na jiné C++.
To je běžné především, pokud v projektu napsaném v C++ potřebujeme nějakou
knihovnu v C. Máme-li celý kód pod kontrolou a pouze v části chceme použít
možnosti C++, je obvykle (tj. zejména pokud nechceme C část použít i v nějakém
jiném projektu) lepší použít překladač C++ i na zbytek projektu, i kdyby šel
přeložit jako C. V jednom ze závěrečných dílů si ukážeme, jak se kód spojuje.
Jednodušší je z C++ volat C, ale jde to i naopak.
Někteří lidé se vyjadřují dosti nepřesně, takže pokud uslyšíte, že
je program napsaný v céčku a máte pochybnosti, je vždy lepší se zeptat, zda
je míněno čisté C nebo C++. Setkáme se s tím zejména u lidí neznalých
(podobně, jako se záměnou Javy a JavaScriptu), ale bohužel běžně i u zkušených
C++ programátorů, které často ani nenapadne, že by někdo mohl psát v C.
Kdy použít C a kdy C++
C použijeme zpravidla, pokud
- Vlastnosti C++ nepotřebujeme.
- Jde nám o přenositelnost a na jedné z cílových platforem není C++.
- Chceme mít program víc pod kontrolou.
- Je pro nás kriticky důležitá rychlost a nenáročnost programu.
- Píšeme ovladač, operační systém a podobně.
- Píšeme knihovnu k použití z C i C++.
První bod je zřejmý. Pokud v obou jazycích napíšeme program se stejnou
námahou, zpravidla sáhneme po čistém C, neboť má s přenositelností ještě
menší problémy než C++ a ještě lepší dostupnost překladačů. S tím souvisí
i druhý bod. Jazyk C má tu výhodu, že jeho kód je poměrně jasný, je zřejmé,
co jaký příkaz nebo řídící struktura provádějí na úrovni asembleru (když
nepočítám optimalizace překladače). Runtime podpora je jednoduchá, nehrozí
například alokace paměti v místech, kde to programátor neočekává a podobně.
Každého céčkaře pobaví historky z Javy, kdy "došla paměť kvůli garbage
collectoru". Program napsaný v C je tak dobrý, jak dobrý je jeho programátor, zatímco
C++ má přeci jenom o krok blíž vyšším jazykům. Díky tomu je C stále hlavní
(a v některých případech i jediný možný) jazyk pro ovladače, operační systémy
a podobně. C rozhraní je široce podporováno nejrůznějšími jazyky,
operačními systémy, databázemi a podobně, navíc C se z C++ volá snadněji než
naopak. Proto nejrůznější knihovny určené k co nejširšímu použití
(s výjimkou GUI, kde je objektově orientovaní programování velmi přirozené)
bývají obvykle napsané v C nebo alespoň mají C rozhraní.
C++ použijeme zpravidla, pokud
- Potřebujeme (nebo chceme) objektově orientované programování, například GUI, simulace, datové struktury...
- Chceme využívat další vlastnosti jazyka C++, hlavně šablony, výjimky,
prostory jmen...
- Chceme využívat C++ knihovnu, hlavně hotové datové struktury.
- Jsme k C++ přinuceni knihovnou 3. strany, například Qt.
První program
Vytvořte soubor program.cpp a zapište do něj
#include <stdio.h>
int main(void) {
puts("Ahoj světe");
return 0;
}
nebo, pokud je pro vás čistota návrhu v duchu C++ OOP důležitější než okamžité
vysvětlení, raději
#include <iostream>
int main(void) {
std::cout << "Ahoj světe" << std::endl;
return 0;
}
Zdrojový kód přeložte
$ g++ program.cpp -o program
a spusťte
$ ./program
Pokud vám to přijde moc jednoduché, můžete si zkusit přeložit libovolný
z příkladů předchozích dílů jako C++, aspoň si ověříte, že slušně napsaný kód
v C jde přeložit i pomocí překladače C++. Důležité je volat g++ místo gcc
a také přípona souboru. Zde bohužel není jednotná konvence, běžně se používá
cpp (hlavně ve světě KDE, Qt, DOSu a Windows), setkáme se však také s cc, cxx
nebo C. Ta poslední je tak trochu na truc uživatelům nejmenovaných operačních
systémů, které nerozlišují velikost písmen v názvech souboru.
Pokračování příště
Příště si ukážeme drobná omezení C++ oproti C a některá méně významná
vylepšení.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|