C++ II, Ahoj, svet!

17.10.2015 | 20:17 | Central Nexus | borg

Vitajte pri druhom pokračovaní seriálu o programovacom jazyku C++. V prvej časti seriálu sme si ukázali jednoduchý program „Ahoj, svet!“, ktorý si v tejto časti popíšeme.

Vitajte pri druhom pokračovaní seriálu o programovacom jazyku C++. V prvej časti seriálu sme si ukázali jednoduchý program „Ahoj, svet!“, ktorý si v tejto časti popíšeme.
Tu je výpis programu z prvej časti:

ahojSvet.cpp:

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    cout << "Ahoj, svet!" << endl;
    return 0;
}

Poďme si teraz popísať, čo znamenajú jednotlivé riadky. Teraz to bude trochu zjednodušené, ale viac podrobností sa dozvieme v nasledujúcich častiach.
Takže riadok:

#include <iostream>

Znak # znamená direktívu preprocesora. Preprocesor vykonáva nejaké akcie, ktoré sa vykonajú na zdrojovom súbore, predtým ako sú poslané kompilátoru. To čo má preprocesor vykonať, sa určuje direktívami. V tomto príklade tu máme direktívú include, ktorá znamená zahrnutie hľavičkového súboru do nášho zdrojového kódu. Hlavičkový súbor (header, má príponu .h alebo .hpp, alebo žiadnu) obsahuje deklarácie a definície všetkého potrebného čo budeme používať v našom zdrojovom kóde a dáme teda kompiláru na známosť, že existujú. V tomto príklade používame objekt std::cout (cout v zdrojovom kóde), ktorý je zadefinovaný ako inštancia triedy std::ostream práve v hlavičkovom súbore iostream. To kde bude kompilátor hľadať hlavičkový súbor, určíme v direktíve include pomocou <...> alebo "...“ (uvodzoviek). Znaky <> znamenajú, že kompilátor bude hlavičkový súbor hľadať medzi systémovými (tj napr. v /usr/include), prípadne v cestách ktorému určíme/zadefinujeme. Ak názov hľavičkového súboru vložíme do "" (uvodzoviek), tak ich bude považovať za lokálne a bude ich hľadať v mieste aktuálneho projektu. Ešte jedna poznámka, v C++ sú hľavičkové systémové súbory bez prípony .h (napr. iostream, utility, memory, vector, …), kdežto lokálne C++ hlavičkove súbory majú príponu .h, .hpp. Takisto hľavičkové systémove súbory pre jazyk C majú príponu .h.

Ďaľší riadok

using namespace std;

nám sprístupňuje menný priestor std (std znamená štandardný menný priestor). Viac o menných priestorch sa dozvieme v niektorej budúcej časti. Teraz nám stačí vedieť, že menný priestor je nejaká oblasť, ktorá nám slúži na organizáciu kódu do logických častí a pomáha proti kolíziám názvov tried, funkcíí, konštát atd. Kedže objekt cout je zadefinový v mennom priestore std, tak si tento menný priestor importujeme do nášho zdrojového kódu, čo znamená že pred cout nemusíme písať std::.

Na ďalšom riadku

int main(int argc, char**argv) {

máme zadefinovaný vstupný bod programu a to funkciu main(). O funkciách si budeme hovoriť v niektorej ďalšej časti seriálu. Na teraz nám stačí vedieť, že funkciou main() nám začína vykonávanie nášho programu. Názov nemusí byť len main(), ale aj wmain(), WinMain(), tmain(), to ale zavisí od systému a prostredia. My budeme používať main(). V tomto prípade má funkcia main návratovú hodnotu typu int (celé číslo so znamienkom) a má dva parametre, jeden typu int (celé číslo so znamienkom) a pole smerníkov na char (znak). Opäť sa o pojmoch v predchádzajúcej vete dozvieme viac v budúcich častiach seriálu. Zložená zátvorka { na konci znamená začiatok bloku funkcie, kde definuje čo funkcia bude robiť. Táto zátvorka nemusí byť na tom istom riadku ako názov funkcie, ale može byť na riadku novom:

int main(int argc, char** argv)
{

Ďaľší riadok máme

cout << "Ahoj, svet!" << endl;

cout je objekt inštancie tried std::ostream a slúži na výpísanie textu na štandardný výstup. cout sa nachádza v mennom priestore std, ale keďže sme si tento menný priestor importovali, nemusíme požívať jeho plný názov std::cout. endl nám zabezpečí zariadkovanie za textom. endl je takisto súčasťou menného priestoru std, takže jeho plný kvalifikovaný názov je std::endl.

return 0;

Kľúčovým slovom return ukončíme aktuálnu funkciu a prípadne vrátime nejakú návratovú hodnotu volajúcemu. V tomto prípade v hlavnej funkcii main() je návratová hodnota nula, čo znamená, že program sa úspešne ukončil, teda exit statu procesu je 0, v poriadku. Miesto nuly by sme ale mohli použiť (a mali) makro EXIT_SUCCESS, ale predtým musíme ešte vložiť hľavičkový súbor cstdlib:

#include <cstdlib>
...
return EXIT_SUCESS;

Ak by sa náš program neukončil úspešne (napr. nastala nejaká výnimka), mali by sme vrátiť nenulovú hodnotu, EXIT_FAILURE.
Ukončiť program v C++ môžeme aj pomocou funkcie std::exit() s argumentom EXIT_SUCCESS (alebo 0) alebo EXIT_FAILURE (nenulová hodnota).

Posledný riadok:

}

ukončuje telo funkcie.

A sme na konci druhej časťi seriálu o C++. Ak vám niektoré pojmy nič nehovoria, nevadí. Vysvetlíme si ich v budúcich častiach. Ak máte nejakú otázku, kľudne sa spýtajte dolu v komentároch.

    • RE: C++ II, Ahoj, svet! 18.10.2015 | 13:43
      Avatar Livan Manjaro s XFCE  Používateľ

      Super, takto som si to predstavoval. Len tak ďalej. Budú sa neskôr preberať i GUI aplikácie?

      • RE: C++ II, Ahoj, svet! 18.10.2015 | 13:55
        Avatar Juraj Artix - OpenBox  Používateľ

        GUI uź nemá moc čo robiť s C++

        GUI sa realizuje pomocou ďalších knižníc, najčastejšie QT alebo GTK

        Happy falling
        • RE: C++ II, Ahoj, svet! 18.10.2015 | 14:56
          Avatar Livan Manjaro s XFCE  Používateľ

          Však o to práve ide. Či sa bude preberať i problematika previazania C++ s týmito knižnicami, pretože povedzme si otvorene, konzolové aplikácie nie sú zrovna obľúbené u užívateľov, aj keď niekedy svoje opodstatnenie samozrejme majú.

    • RE: C++ II, Ahoj, svet! 18.10.2015 | 16:30
      Avatar Livan Manjaro s XFCE  Používateľ

      Mimochodom, teraz som si všimol malú chybičku SUCCESS sa píše s dvomi C, v texte je to raz s jedným a potom s dvomi.

      • RE: C++ II, Ahoj, svet! 18.10.2015 | 17:16
        Avatar borg Fedora  Administrátor

        áno, máš pravdu. dík za opravu, je to fixnuté.

    • RE: C++ II, Ahoj, svet! 18.10.2015 | 16:42
      Avatar Livan Manjaro s XFCE  Používateľ

      A ešte ďalšia vec, keď som skusmo vymenil príkaz return 0; za return EXIT_SUCCESS; tak sa to zkompilovalo s nasledujúcou chybou: ‘EXIT_SUCCESS’ was not declared in this scope. Čo je tam zle? Čo tam chýba? 

      • RE: C++ II, Ahoj, svet! 18.10.2015 | 17:17
        Avatar borg Fedora  Administrátor

        aha, fakt. zabudol som, že treba vložiť hlavičkový súbor cstdlib, kde je toto makro definované. pardon, fixol som to tiež

    • RE: C++ II, Ahoj, svet! 15.02.2016 | 13:42
      Avatar lko   Návštevník

      moc dlho ti to nevydrzalo

      • RE: C++ II, Ahoj, svet! 16.02.2016 | 22:19
        Avatar borg Fedora  Administrátor

        nevadi