Konstanty
C++ 11

image_printTisk

Tento článek si klade za cíl vysvětlit význam a princip fungování konstant v jazyce C++. Seznámíme se s důvody jejich zavedení, uvedu zde dvě formy jejich zápisu a krátce záměrně odbočím trochu od tématu a vysvětlím fungování principu preprocesoru, jehož princip fungování je důležitý pro jeden ze způsobů zápisu konstant.

Zatím jsme se v předchozích kapitolách seznámili pouze s číselnými datovými typy. V jazyku C++ sice může být konstantní téměř jakákoliv jazyková entita, ale v tomto článku se zaměříme pro jednoduchost pouze na konstanty číselné. Jako konstantu můžeme chápat deklaraci proměnné doplněné o klíčové slovo const. Není třeba snad ani poznamenávat, že výchozí hodnota číselné konstanty nelze změnit. Ukažme si vše na příkladu:

int main() {
    const int MAX = 10;
    const double PI = 3.1415926;
    return 0;
}

Příklad ukazuje způsob zápisu konstanty pro celočíselnou proměnnou MAX a konstantu reprezentující Ludolfovo číslo.

Proč by se měli používat spíše konstanty místo uvádění vlastních číselných hodnot v kódu? Zde uvádím několik důvodu:

  • Zavedením konstanty pro nějakou číselnou hodnotu zavádíte do zdrojového kódu pojmenování nějaké hodnoty. Jedná se o symbol, který zastupuje a dává význam nějaké číselné hodnotě, která sama o sobě není nositelem významu žádného . Tím se zvyšuje čitelnost kódu, protože ten, kdo bude číst kód po vás, pochopí význam daného čísla z názvu konstanty.
  • Zavedením konstanty se také podporuje zlaté známé pravidlo DRY (Don’t repeat yourself). Pořád je jednodušší změnit hodnotu konstanty, než měnit na několika místech doslovně napsanou nějakou číselnou hodnotu.

Existuje ještě jeden ze způsobů zápisu konstant kromě způsobu s využitím klíčového slova const. K pochopení tohoto způsobu ale je potřebná znalost toho, co představuje pojem preprocesor, a proto z tohoto důvodu krátce odbočím od tématu pojednávajícím o konstantách.

Nyní již ale přistupme k vysvětlení pojmu preprocesor. Ve článku o překladu zdrojových kódů do kódu strojového jsem psal, že zdrojový kód slouží napřed jako vstup pro překladač. Nyní toto zjednodušení rozšíříme. Pravda je taková, že napsaný zdrojový kód jde napřed do komponenty překladače, která se nazývá preprocesor. Tato komponenta hledá ve zdrojových kódech speciální direktivy, pomocí kterých zjednodušeně řečeno provádí různé textové substituce zdrojového kódu a teprve pak tento výstup je dán k dispozici jádru vlastního překladače jazyka C++. Více se o těchto direktivách zmíním ve článku o makrech, v následujícím odstavci představím jen jednu direktivu pro definici konstant.

Každá direktiva preprocesoru je uvozena znakem ‘#’. Direktiva vlastně dává instrukci, jak mají probíhat různé textové nahrazování ve vlastním kódu. Pro zápis konstant se využívá direktiva #define. Ukažme si, jak by vypadal předchozí příklad přepsaný pomocí těchto direktiv.

#define MAX     10
#define PI      3.1415926

int main() {
    return 0;
}

Jak příklad ukazuje, napřed uvedeme vlastní direktivu #define, po té zapíšeme název konstanty a po té její hodnotu. Stojí za zmínku, že existuje takové nepsané pravidlo či konvence, že názvy konstant by se měli uvádět vždy velkými písmeny.

Na závěr bych rád uvedl, že v dnešní době je doporučené definovat konstanty spíše pomocí klíčové slova const. Direktiva #define i celkově většina direktiv preprocesoru se postupně začínají považovat už spíš za historický pozůstatek. Význam používání direktiv preprocesoru má primárně při udržování dobíhajících systémů nebo systémů napsaných přímo v jazyce C. Důvodem postupného odklonu od funkcí preprocesoru je hlavně doba překladu, kdy textové substituce jsou časově velmi náročné.

image_printTisk
Konstanty
C++ 11
4.3 (86.67%) 3 hlasů

Související články

  • Vstup a výstup pomocí textové konzole V tomto článku se velmi podrobně seznámíme se vstupem a výstupem na textovou konzoli. Začneme popisem jednoduchého vstupu a výstupu a pak dále navážeme, jak se pomocí speciálních příkazů, […]
  • Číselné datové typy V této kapitole se objasníme pojem, co je to datový typ. Dále si ukážeme základní číselné datové typy, se kterými jazyk C++ operuje a předvedeme si různé varianty zápisu čísel, hlavně […]
  • Proměnné V minulém článku jsme si řekli, že data programu jsou uchována v různých souvislých úsecích paměti. Abychom mohli v programu používat hodnotu uloženou v nějakém takovém úseku paměti, […]
  • Datový typ “bool” Cílem tohoto článku je osvětlit význam datového typu bool pro logickou hodnotu. Budete seznámeni s novými klíčovými slovy, vysvětlíme si rozdíl mezi operátorem porovnání a přiřazení a v […]
  • Logické operátory Tématem tohoto článku jsou logické operátory, které slouží ke skládání jednoduchých výrazů, i jejich složitějších variant, s aplikovaným relačním operátorem do logických podmínek. Budeme […]
  • Šablony tříd Tak, jak lze vytvářet šablony funkcí, lze vytvářet i šablony tříd, struktur a unionů. Pomocí těchto šablon potom překladač generuje nové uživatelsky definované datové typy. Ukážeme si […]