Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Podobné dokumenty
Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Algoritmizace a programování

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

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

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

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 -

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

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

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

Assembler - 5.část. poslední změna této stránky: Zpět

Jazyk symbolických adres

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

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

11. Přehled prog. jazyků

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

MPASM a IDE pro vývoj aplikací MCU (Microchip)

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

Programovací jazyk C++ Hodina 1

Programovací jazyk Pascal

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

Opakování programování

ČÁST 1. Základy 32bitového programování ve Windows

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

Programování v jazyce C pro chemiky (C2160) 10. Grafická knihovna g2

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

Struktura programu v době běhu

Abstraktní datové typy, moduly

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

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

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

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

Překladač a jeho struktura

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

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

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

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

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1.

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Úvod do programování. Lekce 1

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

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

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

Odvozené a strukturované typy dat

Základy programování (IZP)

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Lexikální analýza Teorie programovacích jazyků

Algoritmizace a programování

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

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

ISU Cvičení 7. Marta Čudová

Základy programování (IZP)

PROGRAMOVÁNÍ V C++ CVIČENÍ

Výčtový typ strana 67

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Jazyk C++ I. Šablony

PHP tutoriál (základy PHP snadno a rychle)

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

Úvod do jazyka C. Úvod do jazyka C. Knihy 2/2. Knihy 1/2. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze.

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

dovolují dělení velkých úloh na menší = dekompozice

Ukazka knihy z internetoveho knihkupectvi

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

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

2 Datové typy v jazyce C

PREPROCESOR POKRAČOVÁNÍ

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

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ý

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

- tzv. standardní vstupní a výstupní proud (input / output stream)

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

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

Pointery II. Jan Hnilica Počítačové modelování 17

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Úvod do programovacích jazyků (Java)

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Úvod do programovacích jazyků (Java)

Zdroje Úvod Zápis a kompilace programu Příklad programu v jazyce C Příklad programu s výstupem. Úvod do jazyka C. Jan Faigl

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Vstupní požadavky, doporučení a metodické pokyny

AUTHOR : Robert Follner DATE. Abstrakt ABSTRACT: Několik poznatků autora (Robert Follner) z programování

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Sdílení dat mezi podprogramy

Programování ve Windows Dynamické knihovny. Andrea Číková Martin Osovský

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

NPRG031 Programování II --- 2/2 Z, Zk

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

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

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Návod na použití programu 8051 IDE

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: Ukončí program. Nula znamená, že vše proběhlo bez chyby.

Funkce, intuitivní chápání složitosti

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

PSK3-9. Základy skriptování. Hlavička

DTP Základy programování Úvod do předmětu

Transkript:

Programovací jazyk C(++) static struct vm_area_struct * unmap_fixup(struct mm_struct *mm, struct vm_area_struct *area, unsigned long addr, size_t len, struct vm_area_struct 5. Preprocesor, *extra) kompilace { struct vm_area_struct Miroslav *mpnt; Spousta, 2005 unsigned long end = addr + len; area->vm_mm->total_vm -= len >> PAGE_SHIFT; if (area->vm_flags C++ & VM_LOCKED) area->vm_mm->locked_vm -= len >> PAGE_SHIFT; /* Unmapping the whole area. */ if (addr == area->vm_start && end == area->vm_end) { if (area->vm_ops && area->vm_ops->close) area->vm_ops->close(area); if (area->vm_file) fput(area->vm_file); kmem_cache_free(vm_area_cachep, area); return extra; } 1

Kompilace programu Preprocesor Zdrojový kód (.c,.h) Kompilátor Kód v assembleru Knihovny Assembler Objektové soubory Linker Spustitelný program 2

Preprocesor na vstupu dostane zdojový kód (.c nebo.h) vypustí komentáře interpretuje speciální direktivy preprocesoru příkazy, které jsou uvozeny #, např. #include <stdio.h> na výstupu preprocesoru už se tyto direktivy nevyskytují za direktivou preprocesoru se nepíše středník (!) preprocesor nekontroluje syntax, pouze vypouští nebo nahrazuje text #define PI 3.14159265 3

Direktiva include vkládá do aktuálního souboru jiný soubor obecně libovolný, ale používá se hlavně pro tzv. header soubory *.h #include <soubor> nebo #include soubor verze s <> znamená vlož systémový soubor (součást překladače/systému) verze s znamená vlož soubor z aktuálního adresáře (součást překládaného programu) některé standardní include soubory (C): stdio.h standardní vstup a výstup time.h práce s časem, math.h matematické operace wchar.h práce s unicode znaky stdlib.h různé funkce (převod řetězců na čísla, náhodná čísla,...) 4

Makra bez argumentů neboli symbolické konstanty #define JMENO hodnota #define PI 3.24159265 nadefinuje symbolickou knostantu jménem JMENO každý další výskyt dané konstanty (JMENO) v kódu nahradí řetězcem hodnota až na výskyty, které jsou v řetězcových konstantách hodnotu konstanty je možné testovat (porovnávat), případně oddefinovat často je vhodnější používat výčtový typ (enum) opět: za hodnotou není středník (až na výjimky :-)) hodnota může být cokoliv, třeba příkaz, nebo část příkazu 5

Makra podobně jako konstantu lze nadefinovat makro oproti konstantě má jeden nebo více argumentů #define sq(arg)(arg * arg) pokud je obsahem makra matematický výraz, uzavírá se do uvozovek správně by se měl uzavírat také každý výskyt argumentu: sq(1+2) /* rozvine se na 1+2*1+2 */ správně má být: #define sq(arg)((arg) * (arg)) některé standardní funkce mohou být také definovány jako makro např.: #define getchar() getc(stdin) 6

Podmíněný překlad #ifdef, #ifndef, #if, #else, #elsif, #endif direktivy umožňují existenci více variant kódu v jednom zdrojovém souboru neboli některé části kódu a jiné vynechat bloky jsou vyznačeny pomocí direktiv preprocesoru #ifdef, #ifndef: testují, zda je daná konstanta (ne)definována #if: testuje, zda je daná (konstantní) podmínka splněná musí být vyhodnotitelná před překladem :-) #else, #elsif: else, resp. else-if větve #endif: ukončení bloku 7

Podmíněný překlad často se používá, pokud je část kódu jen pro specifický případ např. jen pro některou platformu, OS, normu, často může znepřehledňovat kód (nesmí se přehánět) nebo pro zamezení několikanásobnému vložení souboru (viz dále) případně pro vypuštění ladicích informací ve finální verzi programu #ifdef LINUX #define DEBUG(a) syslog(log_debug, a) #else #define DEBUG(a) fprintf(stderr, a) #endif DEBUG( chyba, nemuzu otevrit soubor.txt\n ); 8

Direktovy preprocesoru symbolické konstanty je možné měnit pouze tak, že je oddefinujeme #undef JMENO a znovu nadefinujeme: #define JMENO nova_hodnota #error message, #warn message během kompilace vytiskne hlášku a skončí (pouze #error) např. pokud pro danou situaci nelze pokračovat v překladu 9

Kompilátor na vstupu dostane kód bez komentářů a s rozvinutými direktivami preprocesoru (pokud chceme vidět, často si musíme explicitně říct) na výstupu bude kód v assembleru pro daný procesor kompilátor se (obecně) skládá z několika částí: lexikální analýza (rozdělení vstupu na tokeny) syntaktická analýza (vyhodnocení konstrukcí (např. if-then-else) sémantická analýza (kontrola typů) optimalizace (nezávislé či zavislé na cílovém assembleru) generování kódu 10

Assembler přeloží kód ze symbolické formy do řečí procesoru (CPU) vytváří tzv. objektový soubor (s příponou.o nebo.obj) téměř spustitelný soubor, ale s nevyřešenými odkazy na externí objekty např. knihovní funkce, funkce z ostatních object souborů, atd. 11

Assembler.section.rodata.LC0:.string "Hello world!\n".text.align 4.globl main.type main,@function main: pushl %ebp movl %esp,%ebp subl $8,%esp addl $-12,%esp.L2:.Lfe1: pushl $.LC0 call printf addl $16,%esp xorl %eax,%eax jmp.l2.p2align 4,,7 leave ret.size main,.lfe1-main 12

Linker spojí objektové soubory a knihovny, přibalí spouštěcí kód (který zavolá funkci main) a vytvoří spustitelný soubor knihovna je balík objektových souborů většinou k ní existuje tzv. hlavičkový soubor (header file, např stdio.h) knihovna může být statická (připojuje se při linkování spustitelného souboru) nebo dynamická (linkuje se při startu souboru) 13

Struktura zdrojového kódu tzv. oddělený překlad souborů původně hlavně kvůli omezeným prostředkům kompilátoru i dnes pro velké projekty, ale používá se hlavně kvůli přehlednosti program se skládá z více částí (zdrojových souborů.c) každý soubor obsahuje ucelenou část kódu soubory se překládají každý zvlášť do objektového souboru dohromady je sestavuje až linker (jinak by se např. mohly celé vkládat do jednoho C souboru) vkládají se pouze hlavičkové soubory (.h) které obsahují delkarace funkcí a externí deklarace proměnných 14

Paměťové třídy paměťová třída určuje vytvoření a zacházení s objekty v C každý objekt má právě jednu paměťovou třídu třída auto tzv. automatické proměnné, používá se implicitně pro lokální proměnné jinde se použít nedá proměnné se vytvoří na zásobníku, po ukončení funkce se proměnná zruší pokud není inicializovaná, má pokaždé novou hodnotu třída register často používané automatické proměnné nápověda kompilátoru 15

Paměťová třída extern globální proměnné nebo funkce, mohou být použity kdekoliv v programu (i z jiných objektových souborů) implicitní třída pro globální proměnné pokud před globální proměnnou přidáme extern, dostaneme informativní deklaraci tedy nevyhrazuje se místo pro danou proměnnou informativních deklarací proměnné může být v jednom souboru několik, definice jen jedna pokud zapomeneme na definici, oznámí nám chybu až linker (nenajde proměnnou, jen odkazy na ni) 16

Paměťová třída static statické funkce a statické globální proměnné jsou definovány v daném souboru lokálně je možné je používat pouze v daném zdrojovém souboru (tzv. interní linkování) v jiném souboru se může vyskytovat jiná proměnná/funkce stejného jména lokální statické proměnné uvnitř funkcí, ale na rozdíl od automatických proměnných vznikají už při spuštění programu zachovávají si hodnotu při opětovném volání funkce (chovají se vlastně jako globální proměnné) ale oproti globálním proměnným jsou přístupné jen v dané funkci 17

Struktura zdrojového kódu zdrojové soubory (.c) obsahují: potřebné #include (vždy se vkládají pouze hlavičkové soubory!) definice lokálních typů deklarace statických globálních proměnných exportované funkce, lokální funkce (uvozené static) hlavičkový soubor (.h) obsahuje: ochránu před opětovným vložením do stejného zdrojového kódu definice globálních typů externí deklarace globálních proměnných hlavičky funkcí exportovaných vně souboru.c 18