PŘEDNÁŠKA KURZU BPC2A

Podobné dokumenty
Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Algoritmizace a programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Programování v jazyce C a C++

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Programování v C++ 1, 1. cvičení

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Opakování programování

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Algoritmizace a programování

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Algoritmizace a programování

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

PB161 Programování v jazyce C++ Přednáška 10

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Jazyk C++ I. Šablony

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Úvod do programovacích jazyků (Java)

Úvod do programování. Lekce 1

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

přetížení operátorů (o)

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Základy programování (IZP)

IUJCE 07/08 Přednáška č. 1

přetížení operátorů (o)

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Paměť počítače. alg2 1

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Třídy a struktury v C++

Reprezentace dat v informačních systémech. Jaroslav Šmarda

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Odvozené a strukturované typy dat

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

Jazyk C++, některá rozšíření oproti C

Objektové programování

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

ADT/ADS = abstraktní datové typy / struktury

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

7. Datové typy v Javě

Zápis programu v jazyce C#

Programovací jazyk Pascal

Operační systémy. Cvičení 3: Programování v C pod Unixem

Základy programování (IZP)

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Základy programování (IZP)

Struktura programu v době běhu

Programování v jazyce C a C++

Programovací jazyk C++ Hodina 1

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Algoritmizace a programování

PB161 Programování v jazyce C++ Přednáška 7

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace prostorových úloh

PB161 Programování v jazyce C++ Přednáška 7

Základy programování (IZP)

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Floating Point. Jak je reprezentovaný a proč někdy nefunguje. 2. června 2013

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

8 Třídy, objekty, metody, předávání argumentů metod

Úvod do programování. Lekce 3

Prezentace a vysvětlení programového prostředí NXC

Ukazka knihy z internetoveho knihkupectvi

konstruktory a destruktory (o)

Algoritmy a datové struktury

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Sada 1 - Základy programování

NPRG030 Programování I, 2015/16 1 / :25:32

C2115 Praktický úvod do superpočítání

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

PREPROCESOR POKRAČOVÁNÍ

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Transkript:

1

PŘEDNÁŠKA KURZU BPC2A Rozšíření jazyka C, ISO C99, ISO C11 M. Richter (email: richter@feec.vutbr.cz) P. Petyovský (email: petyovsky@feec.vutbr.cz) 2

Standardní hlavičkový soubor matematické knihovny math.h Definice nových typů pomocí typedef Hlavní rozšíření jazyka v normě C99 Inline funkce Datový typ: _Bool Datový typ: _Complex Modifikátory proměnných const volatile restrict Hlavní rozšíření jazyka v normě C11 (ISO/IEC 9899:2011) Programovací styly Defenzivní programování Nástroje pro pomoc při vytváření programů / projektů Dotazy 3

Standardní hlavičkový soubor matematické knihovny math.h -makrem FLT_EVAL_METHOD lze nastavit přesnost (interních) výpočtů pro float, double -makra INFINITY, NAN (isfinite, isinf, isnan) dle IEEE754 -makra pro řešení chybových stavů -trigonometrické funkce acos (acosf, acosl), asin, atan, atan2, cos, sin, tan, hyperbolické verze, exp, exp2, log10, log (základ e), log2 -frexp rozdělí reálné číslo na normalizovanou mantisu a exponent -fabs, pow, hypot (odmocnina ze sumy kvadrátů), sqrt, -ceil, floor, round, trunc, remainder práce s desetinnou částí čísla 4

Definice nových typů pomocí typedef -klíčové slovo typedef umožňuje nadefinovat nový typ, -nový typ je odvozen od typu stávajícího a je z/na něj konvertovatelný, -dále je výhodné jej použít při složitých definicích jako například při použití ukazatelů na funkce, -používá se v případě, že chceme některý typ měnit, například máme řadu funkcí, které mají pracovat pouze s jedním typem, ale až při překladu se chceme rozhodnout s jakým //nový typ vzniklý odvozením z int* typedef int* NOVY_TYP; // následné použití je stejné jako u jiných typů NOVY_TYP funkce(novy_typ aa, NOVY_TYP *bb) { NOVY_TYP a = NULL, b = NULL, c = NULL; // všechny tři proměnné jsou typu int * return aa; } 5

Hlavní rozšíření jazyka v normě C99 (ne vše je v překladači VS2013 implementováno, M$ má asi stále rok 1995) - pokud není uveden typ, již se nepředpokládá, že je to int (vznikne warning) - inline funkce - proměnné nemusí být definovány na začátku bloku (pravidlo minimalizace neinicializovaných proměnných - proměnná vzniká až v okamžiku, kdy víme co jí přiřadit) - Nové typy long long int - minimálně 64 bitů, knihovní bool a complex - pole proměnné délky (automatická proměnná s délkou danou proměnnou) - v C11 změněno na nepovinnou součást normy - řádkové komentáře // - nové hlav. soubory (stdbool.h, complex.h, tgmath.h, inttypes.h) - alternativní pohled na celočíselné typy: int8_t,uint8_t stdtypes.h - generická makra, variadická makra -IEEE floating point / fixed point aritmetika -možnost psaní proměnných v "neanglických" znacích (pokud možno nevyužívat) 6

- designated initializers: int a[6] = { [4] = 29, [2] = 15 }; struct point {int x; int y;} = {.y = 10,.x = 20}; -compound literals: struct foo {int a; char b[2];} var; var = ((struct foo) {x + y, 'a', 0}); - restrict qualification - umožňuje optimalizace práce s ukazateli (viz. dále) - je-li definováno makro STDC je překladač C90 je-li definováno STDC_VERSION s hodnotou 199901L je možné používat vlastnosti C99 7

Inline funkce -inline je klíčové slovo jazyka - nejrychleji možné volání, rozvinutí do kódu (obdoba makra s parametry) -typová kontrola parametrů (a z toho plynoucí případné implicitní konverze) -není nutné ozávorkovat parametry -netvoří kód -> je v hlavičkovém souboru. Je to předpis pro vytvoření kódu inline int deleno2(double a) {return a/2;} int bb = 4; double cc; cc = deleno2(bb); // v tomto místě překladač // vloží (něco jako) cc = (int)(double(bb)/2); 8

Datový typ: _Bool -Celočíselný datový typ s nejmenším rozsahem -knihovnou a s podporou překladače definovaný typ pro logické proměnné společně s konverzemi -definována makra bool (_Bool), true (1), false (0) -Konstanty konvertovány na 0 a 1 -zajišťuje hlav. soubor: stdbool.h 9

Datový typ: _Complex -knihovna pro práci s komplexními čísly včetně nejčastěji používaných funkcí -tři verze: pro typ float, double a long double. float _Complex, double _Complex, float complex, double complex -knihovna nemusí být implementována (zjištění makrem STDC_IEC_559_COMPLEX, někdy i STDC_NO_COMPLEX ) -definice _Complex_I (konstantní), _Imaginary_I komplexní číslo pouze s imaginární částí. -hlavičkový soubor: complex.h -funkce cacos (ComplexArcCOSinus), cacosf, cacosl, casin, catan, ccos (ComplexCOSinus), csin, ctan, cacosh, ccosh,, -cexp (base e), clog (base e), -cabs, cpow, csqrt, conj, -carg, cimag, creal, float _Complex cislo = 2.0f + 2.0f*_Complex_I; 10

Modifikátory proměnných -v jazyce C jsou nejčastěji používány modifikátory const, volatile, restrict -modifikátor const slouží k oznámení, že se proměnná nebude měnit a je to kontrolováno překladačem -modifikátor volatile slouží k oznámení, že proměnná může být měněna (asynchronně) aniž by to bylo z kódu zřejmé -modifikátor restrict říká, že proměnná typu ukazatel (všechny proměnné přístupné pomocí této proměnné/ukazatele) je jediná, pomocí které se manipuluje s danými daty const int KMax = 10; KMax++; // Tohle nepůjde ani přeložit 11

volatile proměnná -modifikátor, který v definici proměnné upozorňuje překladač, že proměnná může být asynchronně (na pozadí) měněna (například v přerušení) -překladači je zakázáno předpokládat neměnnost proměnné, tj. při každém použití znovu načítá její obsah z paměti, -takováto proměnná nemůže být optimalizována/ukládána do registru, protože druhý proces ji mění v paměti a tak musí být vždy používána z paměti volatile int flag = 1; // definice globální proměnné { // uvnitř přerušovací rutiny flag = 0; // nastavení, že přišla událost na kterou se čeká v hlavní programu } { while(flag); // nekonečný cyklus. // Ukončí ho přerušení, které změní hodnotu proměnné. // pokud bude proměnná v registru, přerušení ji změní v paměti, k ukončení nedojde } 12

restrict proměnná -modifikátor spojený s definicí ukazatele -tento modifikátor říká, že daný ukazatel je jediný určený pro aktivní přístup (zápis) k daným datům v daném okamžiku. -prototyp funkce informuje uživatele, jaké relace mají mít paměťové bloky. Je-li uvedeno klíč. slovo restrict, potom to například znamená, že se nekontroluje překrytí dvou prostorů na které ukazují různé restringované ukazatele a s tím vzniklé kolize zapříčiněné přepisováním dat ve špatném pořadí. -zároveň se jedná se o informaci, že přístup k datům může překladač provádět libovolně (optimalizovat na rychlost, měnit pořadí přístupu a to bez kontroly kolizí -splnění této podmínky je závazkem pro programátora a není překladačem kontrolováno int memory_move(restrict char *asrc, restrict char *adst) definice říká, že asrc a adst jsou jediné, které ukazují na své data. Jinými slovy ale také, že blok dat daný asrc a adst se nepřekrývá a není tedy nutné řešit přesun tak, aby nedošlo k překrytí dat, která budeme ještě potřebovat, daty přesouvanými. 13

Hlavní rozšíření v normě C11 (ISO/IEC 9899:2011) -multi-threading (vlákna) a příslušenství (mutex, ukládání a manipulaci s proměnnými) -některé vlastnosti C99 přesunuty do volitelných součástí jazyka -zarovnání proměnných (alignment) a alokovaných prostorů -type-generic výrazy umožňující reagovat na typ proměnné (v makrech) klíčové slovo _Generic -vylepšení práce s Unicode typy char16_t a char32_t pro manipulaci s UTF-16 a UTF-32. V headeru uchar.h jsou i funkce pro práci s těmito typy -funkce gets nahrazena za funkci gets_s -static assertions vyčíslení #if a #error již při překladu (pokud je to možné) -při otevírání souboru další příznak x pro přístupová práva k souboru. -Makro STDC_VERSION je definováno jako 201112L 14

Programovací styly Z hlediska možností jazyka -strojový jazyk jednoduchý, omezený počet příkazů -strukturované programování využití struktur/programových bloků -objektově orientovaný návrh Z hlediska struktury kódu -pravidla pro psaní programu, funkcí, názvů proměnných, grafické struktury -má usnadnit orientaci v cizích textech -je závislá na konkrétním programovacím jazyku -definovaný osobně, komunitou, firemními doporučeními (např. MISRA C) 15

Definice stylu může obsahovat: -pravidla rozdělení do zdrojových souborů -formát souborů (hlavička, obsah ) -komentáře co a jak se komentuje -grafický styl programu: kolik příkazů na řádek, jak a kdy odsazovat začátky řádků, kde definovat proměnné, použití mezer či tabelátorů, prázdných řádků -pravidla pro vytváření názvů proměnných, funkcí -nedoporučené, nebo zakázané součásti jazyka 16

Defenzivní programování -programátor vytváří program s vědomím, že okolí ho bude někdo napadat -předpokladem je, že může nastat jakákoli varianta (vstupů, běhu programu) a je tedy nutné tyto stavy identifikovat a program na ně už předem připravit -sanitizace veškerých vstupů, tainted režim chodu programu -součástí je i řešení těchto stavů tak, aby program nemusel být ukončen, -důležitou součástí je ochrana a kontrola dat, které program vlastní -korektní správa sdílených zdrojů (paměť, síťová spojení, grafické kontexty ) -metody tvorby programu: důkladný rozbor, trvání na stanovených pravidlech, (znovu)použití odladěného kódu, testování, regrese ve funkčnosti a testech -důležité je využití testerů, které nemají ponětí o kódu -testy mohou být prováděny i osobami, vstupními soubory, nebo programy -existují knihovny pro automatické testování 17

Nástroje pro pomoc při vytváření programů / projektů Doxygen -pomocí formátovacích znaků uvnitř standardních komentářů zdrojového textu lze pomocí tohoto programu vytvořit dokumentaci -výsledkem je html, pdf kód s vazbami mezi stránkami, proměnnými, soubory -automaticky jsou vybírány funkce, proměnné, jsou popisovány vazby mezi proměnnými a soubory SVN (GIT, Mercurial) -Subversion nástroj pro spravování verzí souborů se zdrojovými texty -na serveru existuje aktuální verze zdrojových textů -jednotliví autoři si stáhnou tuto verzi a nezávisle na druhých vytváří/mění kód -po odladění menších celků jsou tyto nahrány zpět na server. SVN umí spojit jednotlivé verze tak, že může pracovat současně více autorů -doplňkové nástroje pro sledování změn (pamatuje si historii), vývoje, autorství -možnost vývojových větví, možnost vracet se ke starším verzím 18

ODKUD JDEME A KAM... 19

DOTAZY? 20

DĚKUJI ZA POZORNOST 21