Krótki opis języka C oraz C++.
Dla całkowicie "zielonych" postanowiłem umieścić skrócony opis tych języków. Można się z niego dowiedzieć o najprostszych podstawach. Opisałem tutaj pewne cechy, składnię i porady dotyczące programowania. Bardziej wtajemniczeni programniści mogą sobie "odświeżyć" swoje wiadomości, lecz nikt nie nauczy się tu programować. Tego trzeba nauczyć się samemu - najlepiej pisząc jak najwięcej programów. Zakładam jednak, że czytając ten opis posiadasz już jakiś zasób wiadomości na temat podstawowych pojęć komputerowych, takich jak bajt, słowo, system szesnastkowy, kod ASCII, adres pamięci itp.
Na tej podstronie ukazuję różnicę pomiędzy C/C++ a innymi językami. Wszystkie bowiem języki można zaklasyfikować do dwóch rodzajów.
- Języki interpretowane - wykonanie programu w takim języku polega na pobieraniu przez interpretator kolejnych rozkazów zapisanych normalnym tekstem i wykonywanie związanych z nim czynności. Program można dowolną ilość razy poprawiać, można go uruchomić od dowolnego miejsca. Jednak wadą interpretacji jest powolność działania wykonywanego programu - każdy bowiem rozkaz musi być osobno zinterpretowany.
- Języki kompilowane - przed uruchomieniem program musi być poddany kompilacji czyli tłumaczeniu. Kompilator odczytuje kolejne rozkazy i generuje program w wewnętrznym kodzie procesora. Program w takim języku zwany jest kodem źródłowym; może zostać napisany przy pomocy zwykłego edytora (np. Notatnika). Po skompilowaniu otrzymuje się tzw. kod wynikowy, możliwy do uruchomienia. Wadą kompilacji jest konieczność ponownego tłumaczenia kodu źródłowego po każdej najmniejszej nawet poprawce. Jednak niezaprzeczalną zaletą jest szybkość wykonania programu; działa on wszak z pełną prędkością procesora, bo składa się już tylko z jego wewnętrznych rozkazów.
- Języki półkompilowane - nie jestem pewien co do JavaScript czy Visual Basic for Applications, ale wydaje mi się, że tam kod źródłowy nie jest tłumaczony do rozkazów maszynowych, tylko do tzw. kodu pośredniego, który potem w fazie wykonania jest interpretowany. Nie jest to takie bezsensowne rozwiązanie. W końcu teraz komputery są dość szybkie, żeby móc wykonywać interpretowany kod. Na pewno jednak szybciej jest on wykonywany, niż (jak w interpretatorach) program w wersji czysto tekstowej. Przykład: w programie może być skok do innego miejsca, wówczas interpretator za każdym razem musi wyszukiwać to miejsce w programie, a w kodzie półskompilowanym jest po prostu ustalony adres skoku. Na dodatek ułatwia to debugowanie w programie (czyli wyszukiwanie błędów jego działania).
Języki C i C++ są kompilowane. Po skompilowaniu programu otrzymuje się tzw. moduły, które muszą być następnie połączone z tzw. bibliotekami. Dokonuje tego program zwany linkerem. Co oznacza linkowanie z bibliotekami? W innych językach zawarte są już pewne procedury, np. wejścia/wyjścia lub graficzne. W C/C++ tak nie jest. W samym języku nie ma żadnych takich procedur; wszystkie one znajdują się w zewnętrznych bibliotekach. Co ciekawe, samemu można sobie takie biblioteki pisać i dołączać je do swoich programów. Na przykład po napisaniu jakiejś gry pewne procedury możnaby w ten sposób użyć w innej grze, po co je pisać jeszcze raz? Producent danego kompilatora zadbał jednak już o to, by w bibliotekach statndardowych umieścić te najpotrzebniejsze procedury, na przykład wyświetlające coś na ekranie, operujące na plikach, a czasem nawet graficzne. A zatem gotowy do uruchomienia program składa się ze skompilowanych modułów i dołączonych bibliotek.
Jezyki C/C++ są strukturalne, co oznacza, że każdy program ma specyficzną strukturę (budowę); może to też oznaczać możliwość operowania przez programy na strukturach danych czyli danych odpowiednio poukładanych i pogrupowanych. Inne języki często operują na prostych danych, takich jak bajt, słowo. W języku C i C++ oprócz takich podstawowych typów danych, możemy definiować swoje poprzez łączenie danych o różnych typach w tzw. struktury lub klasy. Przykładami mogą być liczby zespolone czy zbiory. Język C++ wprowadza dodatkowo pojęcie obiektu, który jest reprezentantem zdefiniowanej klasy, a może oprócz danych składowych określać też czynności możliwe do wykonania na nim (metody). Szczegóły są opisane na dalszych podstronach.
Na koniec tego wstępu można napisać, że języki te są bardzo zwięzłe w swojej składni. Opierają się często na pojedynczych symbolach składających się z jednego lub dwóch znaków. Twórcy tych języków położyli duży nacisk na czytelność takich krótkich form. Często skomplikowane obliczenia (tzw. wyrażenia) da się napisać z jednej linijce kodu źródłowego. Częstokroć zadany problem da się rozwiązać przy użyciu kilku różnych konstrukcji programowych. Wydaje się, że te wymienione zalety przyczyniły się do tak szybiego zdobycia popularności przez języki C i C++. Nowsze języki takie jak Java™ lub jego młodszy kuzyn JavaScript opierają się właśnie na znanej z C składni. Warto się więc z nią zapoznać.