Preprocesor zpracovává zdrojové kódy před použitím překladače. Vezme kód a pohraje si s ním tak, aby ho překladač mohl dále zpracovat. Nahradí v textu identifikátory konstant jejich hodnotami(rozvíjí makra), umaže všechny komentáře a připraví kód na podmíněný překlad.
Direktivy preprocesoru
Direktivu pro preprocesor poznáme jednoduše, protože na začátku má # ( mřížka, hash ). Nejběžnější direktivou je#include<nazev_knihovny>.
#include<nazev_knihovny> // knihovnu bude hledat v systémových adresářích
#include“nazev_knihovny“ // knihovnu bude hledat v adresáři, kde je umístěn překládaný soubor
Podmíněný překlad
Podmíněný překlad na základě konstantního výrazu:
#if výraz
//kód A
#elif výraz
//kód B
#else
//kód C
#endif
Předchozí konstrukce nám umožní podle zadaného výrazu ( klidně 0 nebo 1 ) určit, která část kódu se bude překládat. Tuto konstrukci jsem naposled použil ve škole. Mnohem užitečnější je konstrukce tato:
#ifndef ERROR
#define ERROR return 1;
#endif
Makra
Pomocí direktivy #define jmeno_makra hodnota_makra definujeme makra a naopak pomocí #undef jméno_makra se makra ruší.
Symbolické konstanty, makra bez parametru
#define TRUE 1 // definice makra
#define FALSE 0 // takto můžeme nadefinovat typ boolean
Preprocesor následně v kódu "vymění" slovo TRUE za 1 a FALSE za 0.
Příklad se symbolickými konstantami
#define PI 3,141592
#define FILE_NAME "soubor.txt"
#define ERROR "return 1;"
#define SUCCES "return 0;"
// následuje příklad s makrem na více řádků
// Všimněte si \ na konci prvního řádku
#define POZDRAV "Ahoj ja jsem\
katka"
printf("%s",POZDRAV); // na výstup půjde řetězec "Ahoj ja jsem katka"
Makra s parametry
Makra bez parametrů jsou velmi jednoduchá, problém ale může nastat při tvorbě maker s parametry.
//nejdřive obecně
//Mezi jménem makra a závorkami s parametry nesmí být mezera
#define jmeno_makra(parametr1,...,parametrn) hodnota_makra
//přiklad s druhou mocninou
#define mocnina(x) ((x) * (x))
//důležité je uzavírat hodnotu makra do závorek,
//aby nenastala situace:
#define mocnina(x) x * x
mocnina( 6 + 4 )
//makro se rozvine následovně:
// 6 + 4 * 6 + 4 a to rozhodně není 100
Makra s parametry se píší malými písmeny ( síla zvyku ). Další velmi důležitá věc je uzavírání hodnot makra
Jednoduchý příklad s makry
Tento příklad by měl použití maker osvětlit.
//hlavickove soubory
#include<stdio.h>
//definice maker
#define is_zero(x) ((x) == 0)
#define ERROR printf("!!!!!!NULA!!!!!\n");\
return 1;
#define SUCCES return 0;
//hlavni program
int main() {
int cislo;
scanf("%d",&cislo);
if( is_zero(cislo) ) {
ERROR
} else {
SUCCES
}
}
//konec programu
Co to dělá? Jednoduše načte od uživatele celé číslo a když je číslo nulové, tak vrátí hlavní program jedničku a když je načtené číslo nenulové, tak vrátí nulu.
| < Předchozí |
|---|







