VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu CZ.1.07/1.5.00/34.1076 Název projektu Pro vzdělanější Šluknovsko Číslo a název šablony 32 Inovace a zkvalitnění výuky prostřednictvím ICT Autor 0207 Mgr. Bc. Jan Škoda Tematická oblast Programování Číslo a název materiálu VY_32_INOVACE_0207_0214 Preprocesor Anotace Žák si upevní učivo o funkci preprocesoru v programovacím jazyku C Vytvořeno 21. 7. 2013 Určeno pro 3. ročník oboru Informační technologie Přílohy Bez příloh
Metodický list Učitel: Výklad s projekcí elektronického učebního materiálu. Demonstrace v reálném prostředí. Ukázka obecného postupu činností. Monitorování činnosti žáků. Žák: Sleduje výkladovou projekci a demonstraci učitele. Procvičuje na reálném prostředí softwaru.
c++ Preprocesor
Preprocesor Před vlastním překladem zdrojového kódu je kód upraven tzv. preprocesorem. Preprocesor si volá překladač sám, takže o tom ani nemusíte vědět. Preprocesor odstraní ze zdrojového kódu komentáře a rozvine makra, které jsou ve zdrojovém kódu. Všechny direktivy preprocesoru začínají znakem # (čti šarp).
Příklad Například, když zapíšete do zdrojového kódu #include <stdio.h>, pak preprocesor vloží na místo tohoto řádku obsah standardní knihovny <stdio.h>.
Direktivy preprocesoru #define #elif #else #endif #error #if #ifdef #ifndef #include #line #pragma #undef Zdroj: Autor
Standardní makra Makro Význam datový typ Zdroj: Autor DATE TIME FILE LINE STDC cplusplus Datum spuštění preprocesoru Čas spuštění preprocesoru Jméno aktuálního vstupního souboru Pořadové číslo aktuálního řádku Určuje, zda překladač splňuje ANSI C Určuje, zda byl použit překladač C++ string string string int int (1 nebo 0) int (1 nebo 0)
Definice maker Kromě standardních maker si můžete vytvářet makra vlastní. Jejich užívání je velice rozšířené, například je lze použít pro definování počtu prvků pole. Takové makro se pak používá v celém zdrojovém kódu a při změně počtu prvků pole stačí změnit jen makro. Makro se definuje za direktivou #define a lze jej zrušit direktivou #undef.
Příklad #define NAZEV makro... zdrojový kód kde makro používáme... #undef NAZEV... zde už makro není definované... #include <stdio.h> #define N 5 #define VERSE "1.0.0" int main(void) { int pole[n]; unsigned int x;
Příklad #define PI 3.14 #define DVE_PI (2*PI) #define MOD % Za hodnotami není středník. Mezi jménem konstanty a hodnotou se nepíše znak =. Konstanta platí od místa definice do konce souboru.
Příklad #include <stdio.h> #define PI 3.14 int main() { double r = 6.5; double v = 2.1; cout << "Objem valce je:,pi*r*r*v); return 0; }
Makra s argumenty Makra mohou mít také argumenty. Jsou uzavřeny v kulatých závorkách za jménem makra a pokud je více jak jeden argument, jsou odděleny čárkou. #define NAZEV(argument1, argument2,...) makro
Použití Alternativa ke kratším funkcím. Nevýhoda použití funkce Při použití funkce menší efektivita programu. Nevýhoda použití makra Při použití makra vznikne delší (ale rychlejší) program. Na rozdíl od funkcí preprocesor nahradí jméno makra v programu konkrétním textem.
Příklad #define je_velke(c) ((c) >= A && (c) <= Z ) ch = je_velke(ch)? ch + ( a - A ):ch Soubor se preprocesorem rozvine takto: ch = ((ch) >= A && (ch) <= Z )? Ch + ( a - A ):ch
Zápis Argument v definici makra je nutné uzavírat do závorek. V opačném případě velká šance vzniku chyb. Špatně: Definice: #define mocnina(x) x * x Volání: mocnina(f + g) Rozvinutí: f + g * f + g Správně: Definice: #define mocnina(x) ((x) * (x)) Volání: mocnina(f + g) Rozvinutí: ((f + g) * (f + g))
Pojmy Direktiva preprocesoru je příkaz pro preprocesor. Řádek začínající # je považován za direktivu preprocesoru. Direktiva include slouží pro vkládání hlavičkových souborů. Direktiva define definuje makro. Makro definuje symboly a určuje text určený pro rozvoj maker. Direktivy podmíněného překladu určují překládané části zdrojového programu. Ladění programu je proces, při kterém zjišťujeme správnost programu. Trasování programu je provádění programu po jednotlivých řádcích.
Zdroje BERAN, Martin. Učebnice Borland C: učebnice programování v Borland C 4. generace. Praha: BEN - technická literatura, 1995, 442 s. ISBN 80-238-0304-2. HEROUT, Pavel. Učebnice jazyka C. 3. vyd. České Budějovice: Kopp, 1994, 269 s. ISBN 80-858-2821-9. HEROUT, Pavel. Učebnice jazyka C: 2. díl. 1. vyd. České Budějovice: KOPP, 1995, 236 s. ISBN 80-858-2850-2. SCHILDT, Herbert. Nauč se sám C. Překlad Jiří Grée, Adéla Gréeová. Praha: SoftPress, 2001, 623 s. ISBN 80-864-9713-5.