C++ programok fordítása

Hasonló dokumentumok
Alprogramok, paraméterátadás

C programozási nyelv

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

15. Programok fordítása és végrehajtása

Bevezetés a programozásba Előadás: Fordítási egység

Programozás II. 2. Dr. Iványi Péter

Pénzügyi algoritmusok

2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozás C és C++ -ban

Bevezetés a programozásba Előadás: A const

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Dr. Schuster György október 14.

1. Alapok. Programozás II

PROGRAMOZÁSI NYELVEK - CPP. ELŐADÁS JEGYZET

C programozás. 1 óra Bevezetés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

C++ Gyakorlat jegyzet 7. óra

Programozási Nyelvek (C++) Gyakorlat

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Programozási nyelvek Java

Bevezetés a programozásba I.

Programozás I. 5. Előadás: Függvények

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Bevezetés a programozásba I.

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

3. Osztályok II. Programozás II

Fordítóprogramok. Aszalós László szeptember 7.

Bevezetés a programozásba I.

Vizuális, eseményvezérelt programozás XI.

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

ISA szimulátor objektum-orientált modell (C++)

Programozási nyelvek (ADA)

Programozási nyelvek (ADA)

INFORMATIKA tétel 2018

Challenge Accepted:C++ Standard Template Library

Szoftvertechnológia alapjai Java előadások

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Pénzügyi algoritmusok

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Programozás II gyakorlat. 4. Öröklődés

Programzás I gyakorlat

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Programozás II. 4. Dr. Iványi Péter

Programozás 1. Dr. Iványi Péter

Programozási Nyelvek (C++) Összefoglaló

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Java I. A Java programozási nyelv

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Bevezetés, a C++ osztályok. Pere László

Maximum kiválasztás tömbben

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Memóriakezelés, dinamikus memóriakezelés

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Programozás I. gyakorlat

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

C++ Gyakorlat jegyzet 8. óra

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

C++ Standard Template Library (STL)

Programozási Nyelvek: C++

A Code::Blocks fejlesztőkörnyezet

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

INFORMATIKA tétel 2019

RPC Remote Procedure Call Távoli eljárás hívás

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Programozás alapjai II. (1. ea) C++

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Programozás C++ -ban

Programozás 6. Dr. Iványi Péter

Programozás C++ -ban

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Mobil Informatikai Rendszerek

Virtuális függvények (late binding)

Java II. I A Java programozási nyelv alapelemei

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

PE/COFF fájl formátum

Python tanfolyam Python bevezető I. rész

Mobil Informatikai Rendszerek

Java II. I A Java programozási nyelv alapelemei

Programozás alapjai II. (1. ea) C++

Mintavételes szabályozás mikrovezérlő segítségével

Modellező eszközök, kódgenerálás

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozási nyelvek JAVA EA+GY 1. gyakolat

Átírás:

C++, 1/ 33 C++ programok fordítása Pataki Norbert 2012. február 24.

C++, 2/ 33 Információk Pataki Norbert, patakino@elte.hu http://patakino.web.elte.hu/levelezo Jegy: gyakorlat, Szűgyi Zalán

C++, 3/ 33 Bevezetés A processzor csak a gépikódot érti, pl. C/C++ kódot nem tud egyből végrehajtani. Futtatás előtt a C/C++ programokat le kell fordítani. Fordítóprogramot használunk (pl. g++). Fordítóprogramok a programok bizonyos tulajdonságait ellenőrzik, ez növeli a program helyességének esélyét, de nem garantálja azt. A fordítóprogramok optimalizálhatják a kódot.

C++, 4/ 33 Modularizálás Egy programot általában több (sok) file-ban írunk meg, modularizáljuk Csapatmunka növelése Karbantarthatóság: könnyebb bizonyos kódrészleteket megtalálni Csak a szükséges file-okat fordítsuk újra.cpp/.c/.h

C++, 5/ 33 A fordítás lépései 1 A preprocesszor feldolgozza a preprocesszor direktívákat. 2 A,,nyelvi fordítóprogram az átalakított magasszintű kódból alacsony szintű tárgykódot hoz létre. 3 A linker összeszerkeszti a tárgykódokat egy futtatható állománnyá.

A fordítás folyamata C++, 6/ 33

C++, 7/ 33 Fogalmak A lefordítandó program a forrásprogram. A fordítás eredményeként kapott program a tárgyprogram. Az az idő, amikor az utasítások fordítása folyik, a fordítási idő. Az az idő, amikor az utasítások végrehajtása folyik, a végrehajtási idő.

C++, 8/ 33 Preprocesszor Szövegátalakító rendszer Nem ismeri a C++ nyelvet, független eszköz search & replace szöveg bemásolása adott pozícióra szöveg kivágása, benntartása feltételtől függően Használatát minimalizáljuk (helyette C++ nyelvi konstrukciók)

C++, 9/ 33 Preprocesszor direktívák #include "filenev" #include <iostream> #define N 20 #define MAX(a,b) (((a)<(b))?(b):(a)) #undef N #ifndef N #ifdef N #if #else #elif #endif #warning #error

Include guard date.h: #ifndef DATE H #define DATE H class Date {... }; #endif a.h: #include "date.h"... b.h: #include "date.h" #include "a.h" C++, 10/ 33

Preprocesszor: tömb méret paraméterezése C++, 11/ 33 #define N 20 #define M 30... int x[ N ]; int y[ N ]; int z[ M ]; for( int i = 0; i < N; ++i ) { y[ i ] = x[ i ]; }

Preprocesszor: Kommentek C++, 12/ 33 #ifdef KOMMENT... /* magyarazat */... /* magyarazat */... /* magyarazat */... #endif

Preprocesszor: C/C++ C++, 13/ 33 #ifdef cplusplus extern "C" { #endif //... #ifdef cplusplus } #endif

A preprocesszor veszélye C++, 14/ 33 #define MAX(a,b) a > b? a : b MAX( x, y )*2 --> x > y? x : y*2 #define MAX(a,b) MAX( ++x, y ) --> ((a) > (b)? (a) : (b)) ++x > y? ++x : y

Preprocesszor hibák C++, 15/ 33 pperror.cpp:1:1: error: unterminated #ifndef pperror.cpp:1:17: error: aaa.h: No such file or directory pperror.cpp:1:2: error: invalid preprocessing directive #inddd

C++, 16/ 33 Header file-ok Mi ne kerüljön header file-ba? Függvénydefiníció (függvénytörzs) Globális adatdefiníció Névtelen névtér Mi kerülhet header file-ba? Osztálydefiníció include guard-dal ellátva (esetleg helyben kifejtett metódus törzsekkel) Sablon osztályok teljes implementációja Konstans definíció

C++, 17/ 33 C++ nyelvi fordító Feldolgozza a preprocesszor által átalakított forráskódot. A külön fordítási egységek nem feltétlenül egy időben fordulnak le. Ellenőrzi, hogy a nyelv szabályainak megfelel-e a kód. Esetlegesen warning-okat és fordítási hibákat ad vissza. Ha nincs fordítási hiba, akkor az alacsony szintű tárgykód létrejön.

Compiler hibák C++, 18/ 33 comperror.cpp: In function int main() : comperror.cpp:7: error: invalid conversion from int to const char* comperror.cpp:7: error: initializing argument 1 of void f(const char*) comperror.cpp: In function int main() : comperror.cpp:8: error: increment of read-only variable i

C++, 19/ 33 Linker A linker feladata a külső szerkesztésű hivatkozások feloldása (pl. függvények, globális változók). A linker lefordított tárgykódokkal (object-ekkel) dolgozik. A linker,,nyelvfüggetlen. Különböző nyelven írodott kódokból készült object-ek összeszerkeszthetők (pl. Assembly, Ada, Pascal, C, C++, stb.). Több object-ből könyvtár álĺıtható össze statikus vagy dinamikus linkeléshez (.a,.lib,.dll,.so).

Compiler/Linker C++, 20/ 33 a.cpp a.obj: int fac( int ); int main() { std:: cout << "4! == " << fac( 4 ) << std::endl; } utilities.cpp utilities.obj: int fac( int i ) { //... }

Linker hibák C++, 21/ 33 /tmp/ccchvofy.o: In function main : linkererror.cpp:(.text+0x5): undefined reference to f() collect2: ld returned 1 exit status /tmp/ccyt9yah.o: In function f() : a2.cpp:(.text+0x0): multiple definition of f() /tmp/ccg87via.o:a1.cpp:(.text+0x0): first defined here collect2: ld returned 1 exit status

Linkelés C++, 22/ 33 Statikus Dinamikus (dll, so) Betöltődéskor Igény szerint

Tulajdonságok C++, 23/ 33 Statikus csak egyszer kell megcsinálni, nem minden futtatáskor Dinamikus Nagy könyvtárak megoszthatóak különböző alkalmazások között, kisebb méretű futtatott programok Verziókhoz könnyebben alkalmazkodó programok,,dll-hell

Warning C++, 24/ 33 int i = -2; unsigned int j = 5; if ( i < j ) { std::cout << "OK"; } else { std::cout << "Nem OK"; } warning.cpp: In function int main() : warning.cpp:8: warning: comparison between signed and unsigned integer expressions

Warning C++, 25/ 33 void f( char* p ) { //... } f( "Hello" ); warning.cpp: In function int main() : warning.cpp:9: warning: deprecated conversion from string constant to char*

Warning C++, 26/ 33 int i, j; std::cin >> i >> j; if ( i = j ) { //... } warning.cpp: In function int main() : warning.cpp:8: warning: suggest parentheses around assignment used as truth value

Warning C++, 27/ 33 // kivétel: main int f( int i ) { //... // nincs return a függvényben } warning.cpp: In function int f(int) : warning.cpp:6: warning: control reaches end of non-void function

Warning C++, 28/ 33 void f( int i ) { // i-t nem használjuk a függvény törzsében //... } warning.cpp:3: warning: unused parameter i

Warning C++, 29/ 33 void f( int ) { //... } // Nincs warning...

C++, 30/ 33 Más nyelvek Fordítóprogramok Interpreterek Virtuális gépek

C++, 31/ 33 Interpreter Az interpreter program beolvassa a forrásprogramot, és azonnal végrehajtja az utasításokat. Nem fordul gépi kód Dinamikus típusrendszer Flexibilitás Kevésbé hatékony

C++, 32/ 33 Más nyelvek Néhány interpretált nyelv: Perl PHP Javascript shell

C++, 33/ 33 Virtuális gép pl. Java,.NET A forráskódot lefordítjuk egy univerzális tárgykódra (Java: bytecode) Ellenőrzések, optimalizációk végrehajtása Ez a tárgykód egy virtuális számítógép által végrehajtható forma A virtuális gép lényegében egy interpreter, de nem,,forráskódot értelmez, hanem ezt a,,tárgykódot. JIT fordítás: futás közben a bytecode-ból gépi kódot fordít (pl. VM sokszor meghív egy függvényt; futásidejű statisztikák alapján)