headerphoto

Preprocesor

Preprocesor je nástroj, který zpracuje zdrojový kód před samotným překladem. Nekontroluje syntaktickou správnost programu. V konečném důsledku jde o úpravu textu, jeho výsledkem je tedy upravený text programu. Některé operace provádí preprocesor automaticky (odstranění komentářů), další jsou vykonány použitím tzv. direktiv. Jedná se o příkazy pro preprocesor. Řádka, která je určena pro zpracování preprocesorem, musí začínat znakem #(hashmark). Uvedeme si nejčastěji používané direktivy.

Direktiva #define

Pomocí direktivy #define můžeme definovat tzv. symbolické konstanty. Jde v podstatě o pojmenování hodnoty, která se počas běhu programu nemění. Je vhodné dodržovat pravidla:

  • jména konstant píšeme velkými písmeny
  • symbolické konstanty definujeme na začátku zdrojového kódu
  • za hodnotou by měl být komentář vysvětlující její význam
  • za hodnotou není středník

Příklady definice symbolických konstant

#define MAX 10             //max.rozsah pole
#define SOUBOR "data.txt"  //nazev souboru
#define PI 3.14
#define KONC_ZNAK '*'     //ukonceni zadavani textu

Symbolickým konstantám říkáme taky makra bez parametrů. Makra s parametry se používájí podobně jako jednoduché krátké funkce. Na rozdíl od symbolických konstant píšeme názvy malými písmeny.

Př. Makro s parametrem, které testuje, zda znak je velké písmeno

#define je_velke(c) ((c) >= 'A' && (c) <= 'Z') //testuje, zda znak je velke pismeno

Pokud bychom se podívali na definici některých standardních funkcí, zjistíme, že se nejedná o funkce, ale o makra s parametry např. getchar(), isdigit(), ...

Všechna makra se preprocesorem vyhodnocují jako náhrada textu. Preprocesor projde celý celý zdrojový kód a nahradí všechny výskyty názvu konstanty její hodnotou, uvedenou na místě definice.

Direktiva #include

Pomocí direktivy #include vložíme do zdrojového souboru obsah jiného souboru. Soubor se vkládá na místo, kde je uveden příkaz #include. Nejčastěji vkládáme do programu hlavičkové soubory. To se provádí dvěmi způsoby:

#include <stand_soubor.h>
#include "uziv_soubor.h"

Názvy standardních hlavičkových souborů píšeme ve špičatých závorkách. Soubor je potom vyhledáván v systémovém adresáři. Názvy uživatelských hlavičkových souborů píšeme nejčastěji v uvozovkách, soubor je vyhledáván v adresáři, kde je uložený zdrojový kód.

Hlavičkové soubory

Jedná se o textové soubory s příponou .h. Můžeme použít standardní hlavičkové soubory (stdio.h, stdlib.h, string.h, ctype.h, ...) nebo si vytvořit vlastní. Obsahují především:

  • deklarace funkcí (hlavičky funkcí)
  • definice symbolických konstant
  • definice nových datových typů
  • definice tříd
  • vložení jiných hlavičkových souborů

Při vytváření uživatelských hlavičkových souborů je vhodné zabránit vícenásobnému vložení hlavičkového souboru do programu. To se může lehce stát např. při tvorbě projektů.

#ifndef _HLAVICKA
#define _HLAVICKA

/* obsah hlavickoveho souboru */

#endif

Při prvním vložení našeho hlavičkového souboru se definuje konstanta HLAVICKA, která ve spolupráci s direktivou #ifndef zabrání opětovnému natažení obsahu souboru. Název konstanty je vhodné volit s podle názvu hlavičkového souboru.

Poznámky k vytváření projektů:

Projekt obsahuje nekolik souvisejících souborů. Funkce main() se vyskytuje jenom jednou a to nejčastěji v tzv. hlavním programu. Ke každému hlavičkovému souboru vytváříme ještě jeden soubor a to s příponou .c nebo .cpp, který obsahuje definice všech funkcí deklarovaných v odpovídajícím hlavičkovém souboru.

Do hlavního programu vkládáme pomocí #include hlavičkové soubory a následně můžeme v kódu použít námi definované funkce. Hlavičkové soubory nám potom slouží jako "knihovna". Je vhodné uvést v komentářích hlavičkového souboru popis použití funkcí.

Design downloaded from Free Templates - your source for free web templates