Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v C jazyku - SEMINÁŘ

Podobné prezentace


Prezentace na téma: "Programování v C jazyku - SEMINÁŘ"— Transkript prezentace:

1 Programování v C jazyku - SEMINÁŘ
Ing. Michal Heczko

2 Preprocesor jazyka C 7 Programování v C jazyku – SEMINÁŘ
Ing. Michal Heczko

3 Agenda Základní činnosti preprocesoru
Makra bez parametrů (symbolické konstanty) Makra s parametry Vkládání souborů Oddělený překlad souborů Podmíněný překlad

4 Preprocesor jazyka C Zpracování programu

5 Základní činnost preprocesoru
Zpracování zdrojového textu před použitím překladače Nekontroluje syntaktickou správnost programu Provádí pouze záměnu textu (např. identifikátorů konstant) za odpovídající číselné hodnoty (zpracování maker) Vypustí ze zdrojového textu všechny komentáře Připravuje podmíněný překlad Preprocesor

6 Makra bez parametrů Úvod Symbolické konstanty Příkaz #define
Pravidla pro psaní konstant: Většinou se zapisují velkými písmeny Mezi jménem a hodnotou alespoň jedna mezera Za hodnotu je vhodné umístit komentář Nové konstanty mohou využívat již dříve definovaných konstant Pokud je konstanta delší než řádka, uvádíme na konci znak / Úvod

7 Makra bez parametrů Příklady
#define PI 3.14 #define DVE_PI (2*PI) #define MOD % #define JMENO ″Michal″ #define ERROR {printf(″Chyba″);} Příklady

8 Makra bez parametrů Poznámky Poznámky: 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 Poznámky

9 Makra bez parametrů Ukončení platnosti makra
Ukončení platnosti makra – příkaz #undef Příklad: #define POCET 20 #undef POCET #define POCET 30 Ukončení platnosti makra

10 Makra bez parametrů Ukázka 1
#include <stdio.h> #define PI 3.14 int main() { double r = 6.5; double v = 2.1; printf(″Objem valce je %f!″,PI*r*r*v); return 0; } Ukázka 1

11 Makra bez parametrů Ukázka 2
#include <stdio.h> #define POSUN (′a′-′A′) #define KONEC_R ′\n′ int main() { int c; while ((c = getchar()) != KONEC_R) if (c >= ′a′ && c <= ′z′) putchar(c-POSUN); else putchar(c); } return 0; Ukázka 2

12 Makra s parametry Úvod 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 Úvod

13 Makra s parametry Syntaxe Obecná syntaxe: Příklad použití:
#define jmeno_makra(arg1,…,argN) hodnota_makra Příklad použití: #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 Syntaxe

14 Makra s parametry Závorky
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)) Rozvinutí: ((f + g) * (f + g)) Závorky

15 Předdefïnovaná makra Předdefinovaná makra
Jazyk C obsahuje nejen řadu předdefinovaných funkcí, ale i makra. Makra pro konverzi znaků: Definovány v souboru ctype.h tolower - konverze na malá písmena toupper - konverze na velká písmena toascii - převod na ascii (pouze posledních 7b) Předdefinovaná makra

16 Předdefïnovaná makra Předdefinovaná makra Makra pro určení typu znaků:
Definovány v souboru ctype.h isdigit - testuje, zda daný znak je číslice islower - testuje, zda je malé písmeno isupper - testuje, zda je velké písmeno … - … Předdefinovaná makra

17 Vkládání souborů Úvod Příkaz include
obsah zdrojového souboru soubor bude vložen do místa, kde byla volána direktiva include Úvod

18 Vkládání souborů Tvary příkazu include Příkaz #include ″konstanty.h″
Hledá soubor konstanty.h ve složce, kde je uložen volající soubor. Pokud není nalezen, pokračuje se v hledání v dalších složkách dle aktuálního nastavení Tvary příkazu include

19 Vkládání souborů Tvary příkazu include Příkaz #include <stdio.h>
Hledá soubor stdio.h v systémové složce. Použití pro standardní hlavičkové soubory. Tvary příkazu include

20 Vkládání souborů Standardní hlavičkové soubory:
Obsahují definice funkcí, konstant a maker ze standardní knihovny Definovány ANSI normou Použití hlavičkových souborů v souladu s ANSI normou by mělo zajistit 100% přenositelnost mezi nejrůznějšími PC a OS Standardní hlavičkové soubory 1

21 Vkládání souborů Standardní hlavičkové soubory:
Neobsahují celé konstrukce funkcí, ale pouze jejich hlavičky (tzv. funkční prototypy) – popisy jaké má funkce parametry a jaký datový typ vrací Většinou uloženy ve složce \include Např. v MS Visual C EXPRESS: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ Standardní hlavičkové soubory 2

22 Oddělený překlad souborů
Vkládání souborů Oddělený překlad Jak se liší od vkládání souborů?

23 Oddělený překlad souborů
Každý soubor se překládá zvlášť – vzniká více .obj souborů Využití u větších projektů Při opakovaném překladu je přeložen pouze ten soubor, který byl změněn Oddělený překlad souborů

24 Podmíněný překlad Testuje hodnotu logického výrazu Syntaxe:
#if konstantní_výraz část_1 #else část_2 #endif Řízení hodnotou konst. výrazu

25 Podmíněný překlad Příklad 1: #define LADENI 1 #if LADENI
printf(″Hodnota: %d″,i); #endif Řízení hodnotou konst. výrazu

26 Podmíněný překlad Příklad 2: #define WINDOWS 1 #if WINDOWS
#define CESTA ″C:\\program\\data″ #else #define CESTA ″/program/data″ #endif Řízení hodnotou konst. výrazu

27 Podmíněný překlad Testuje, zda je dané makro definováno Syntaxe:
#ifdef konstantní_výraz část_1 #else část_2 #endif Řízení definicí makra

28 Podmíněný překlad Příklad: #define WINDOWS 0 #ifdef WINDOWS
#define CESTA ″C:\\program\\data″ #else #define CESTA ″/program/data″ #endif Řízení definicí makra

29 Podmíněný překlad Testuje, zda dané makro není definováno Syntaxe:
#ifndef konstantní_výraz část_1 #else část_2 #endif Řízení definicí makra 2

30 Podmíněný překlad Příklad: #ifndef DEFINICE #define DEFINICE 1
#define PI 3.14 #define CESTA ″C:\\program\\data″ #endif Řízení definicí makra 2

31 Podmíněný překlad Operátor defined
Pokud chceme kontrolovat více definic zároveň – umožňuje spojování logickými operátory #if defined(KONST_1) && defined(KONST_2) #define KONST_3 3 #endif Operátor defined

32 Podmíněný překlad #elif #error
Stejný význam jako u else-if v mnohonásobném větvení #error Výpis textu preprocesorem na standardní výstup chybových hlášení #elif a #error

33 Podmíněný překlad Příklad
#if LADENI==1 printf("Provedla se 1.cast\n"); #elif LADENI==2 printf("Provedla se 2.cast\n"); #elif LADENI==3 printf("Provedla se 3.cast\n"); #else #error Neplatna hodnota konstanty LADENI! printf("Nebyla provedena zadna cast\n"); #endif Příklad

34 A1PCJ-s 07. Preprocesor Děkuji za pozornost Ing. Michal Heczko
218/U3 Prezentace k dispozici na Uživatelské jméno: student Heslo: utb


Stáhnout ppt "Programování v C jazyku - SEMINÁŘ"

Podobné prezentace


Reklamy Google