VÝUKOVÝ MATERIÁL Identifikační údaje školy
Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vytvořeno Určeno pro Přílohy
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 CZ.1.07/1.5.00/34.1076 Pro vzdělanější Šluknovsko 32 – Inovace a zkvalitnění výuky prostřednictvím ICT 0207 Mgr. Bc. Jan Škoda Programování VY_32_INOVACE_0207_0214 Preprocesor Žák si upevní učivo o funkci preprocesoru v programovacím jazyku C 21. 7. 2013 3. ročník oboru Informační technologie 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
#ifdef
#ifndef
#include #line
Zdroj: Autor
#endif
#error
#if
#pragma #undef
Standardní makra Makro __DATE__ __TIME__ __FILE__ __LINE__ __STDC__ __cplusplus Zdroj: Autor
Význam 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++
datový typ 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′ && ′Z′)
(c) <=
ch = je_velke(ch) ? ch + (′a′- ′A′):ch
• Soubor se preprocesorem rozvine takto: ch = ((ch) >= ′A′ && (′a′- ′A′):ch
(ch) <= ′Z′) ? 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) • Volání: mocnina(f + g) • Rozvinutí: f + g * f + g
x * x
• 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.