Algi.cz

  • Zvětšit velikost písma
  • Výchozí velikost písma
  • Zmenšit velikost písma
Home Základy Jazyka C Preprocesor Jazyka C, makra, podmíněný překlad

Preprocesor Jazyka C, makra, podmíněný překlad

Email Tisk PDF

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.

 

Aktualizováno Neděle, 21 Únor 2010 13:20  

Přidat komentář


Bezpečnostní kód
Obnovit

Banner