C - 2. Gyakorlat

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

C++ - 2.

gyakorlat
C++ alapjai
szigorúan típusos nyelv

fordítási időben ismerni kell minden változó típusát

Alap adattípusok:
primitív

előre definiált típusok

pl. integer, karakterek, boolean, lebegőpontos számok (egyszerű / dupla


pontosságú), void

egyszerű pontosságú kevesebbet foglal, mint a dupla pontosságú

egyszerű: 7 tizedesjegy

dupla: 15 tizedesjegy

tárolásuk függ a hardvertől, fordítótól

sizeof() operátor: Hány bájton tárolja a változót az op. rendszer/fordító?

fix tárolási relációk:

1 == sizeof(char) ≤ sizeof(short int)

adattípus-módosítók

signed/unsigned (alapból minden signed)

unsigned: csak 0-tól felfelé tárolja az adatot

long/long long/short

2/4/8 bájt

bárhol használható

származtatott

pointer, referencia, függvény

C++ - 2. gyakorlat 1
felhasználó által definiált

osztályok, struktúrák, enumok

A fordító működése
3 fő lépés

preprocesszálás (előfeldolgozás)

header fájlok beillesztése a cpp fájlokba

—> fordítási egységek

fordítási egység —> tárgykód (hiányoznak a referenciák, nem


végrehajtható)

preprocesszor: primitív, nyelvfüggetlen

—> meglepő viselkedést okozhat a használata

preprocesszor direktíva: minden, ami #-el kezdődik

#include

copy-paste bemásol mindent

kivédés

saját header fájl —> idézőjelek közötti útvonal-megadás

csak egyszer lehet importálni (iostream-et pl. többször


is)

#include <iostream>
#include <iostream>
#include <iostream>
#include "header.h"

header guard segítségével többször is include-olható

#ifndef __HEADER_H__
#define __HEADER_H__
#endif

C++ - 2. gyakorlat 2
#define

globális konstansok definiálása

#define NUMBER 15

függvények definiálása

#define MAX(x,y) (x > y ? x : y)

#ifdef

van-e definálva token?

#else

#endif

#ifdef NUMBER
#define NUMBER 10
#else
#define NUMBER 0
#endif

#ifndef

#ifdef ellentettje (ha nincs definiálva…)

#undef

#define megszüntetése

használatuk kerülendő

nem determinisztikus a működésük

nyelvi fordítás (compiler)

linkelés

statikus

fordító tölti fel a referenciákat

C++ - 2. gyakorlat 3
dinamikus

futási időben töltődnek a referenciák

belépési pont: main függvény

mindenképpen kell, hogy legyen pontosan egy ilyen

manuális linkelés —> kapcsolók

-c: compile —> tárgykódok elkészítése, ezután lehet őket linkelni

g++ -c main.cpp

g++ -c symbol.cpp

-Wall és -Wextra

warningok, amik egyébként nem kerülnek elő

-std=c++98/03/11/20/stb.

szabvány kiválasztása

-fsanitize=address

memóriaszivárgás

-O0/-O1/-O2/-O3

optimalizálási szintek

a 3-as nem ajánlott

linkelés: g++ main.cpp symbol.cpp

one definition rule (ODR)

egy függvény csak egyszer definiálható

Nyelvi elemek
tokenek

pl. int, változónevek

case sensitive nyelv

literálok

C++ - 2. gyakorlat 4
egész szám, karakter, konstans karakterlánc

operátorok

<<, >>, :: (scope operátor)

szeparátorok

;, {}

Viselkedések, ezek kategorizálása


nem definiált

int i = 0;

std::cout << ++i << i++ << std::endl;

ugyanazt a memóriaterületet szeretnénk módosítani

a fordítás különböző eredményekhez vezethet

nem definiált, hogy a ++i vagy az i++ fut le először

a fordítóra van bízva, hogy optimalizáljon

szekvenciapontok

előtte lévő kifejezések biztos, hogy előbb értékelődnek ki, mint az utána
lévők

; &&, ||

nem specifikált

int i = 0;
int j = 0;

std::cout << ++i << j++ << std::endl;

nem ugyanazt a memóriaterületet szeretnénk módosítani

továbbra sem specifikált, hogy melyik fog végrehajtódni először

C++ - 2. gyakorlat 5
a végeredmény viszont jól definiált (10)

implementáció által definiált

pl. tárolási terület függ a platformtól

C++ - 2. gyakorlat 6

You might also like