Nyelv operátorok
Előadás 2. Az üzemeltetők a nyelv a C ++.
program felépítése
Az üzemeltetők ellenőrzés során a program végrehajtását. Egy sor C ++ nyelven szereplők minden ellenőrzési struktúrák strukturált programozás.
Egy összetett utasítás korlátozza fogszabályozó. Minden más állítás pontosvesszővel végződnek.- Üres nyilatkozata -;
while (<выражение> ) <оператор>
csinál<оператор>míg<выражение> ; A C ++, ez az operátor eltér a klasszikus végrehajtási ciklus utófeltétel, hogy amikor az igazság kifejezése jön a folytatása a ciklust, és nem ki a hurok.
a ([<начальное выражение> ]; [<условное выражение> ]; [<выражение приращения> ]) <оператор>
A nyilatkozat test fut, amíg a feltételes kifejezés hamis (0). Kezdeti expresszió és növekmény kifejezést általában használt inicializáló és módosítására a ciklus paramétereit és más értékeket. A kezdeti kifejezés kiértékelése előtt egyszer az első teszt a feltételes kifejezés. és a növekmény kifejezés kiértékelése után minden végrehajtása nyilatkozatot. A három kifejezés a ciklus fejléc, és akár mind a három elhagyható (ne felejtsük el, hogy hagyja csak a pontosvessző). Ha elhagyjuk a feltételes kifejezés. úgy vélik, hogy igaz legyen, és a hurok végtelenné válik.
Step ciklus szereplő C ++ rugalmas és felhasználóbarát kialakítás, így a ciklus operátor feltétele, míg a C ++ rendkívül ritka, mert A legtöbb esetben ez sokkal kényelmesebb használni az üzemeltető számára.break; break utasítás megszakítja a while utasítás. tennie. és bekapcsolódni. Meg lehet anyag csak a szervezetben ezek az üzemeltetők. Vezérlés átkerül az operátor, amely követi a megszakadt. Ha a break utasítás van írva benne beágyazott közben. tennie. A. kapcsolót. Arra a következtetésre jut csak most lefedő az üzemeltető.
tovább; continue utasítás átadja a vezérlést a következő iteráció a while ciklus. tennie. A. Meg lehet anyag csak a szervezetben ezek az üzemeltetők. Az üzemeltetők csinálni, és közben a következő iteráció kezdődik az értékelés a feltételes kifejezés. A beszámoló a következő iteráció kezdődik a számítás a növekmény kifejezés, és ott van a számítás a feltételes kifejezés.
visszatér [<выражение> ];
Operator visszatérése megszakítja a funkciót, amelyben szerepel, és visszaadja a vezérlést a hívó függvény. Vezérlés átkerül a hívó, közvetlenül a hívás operátor. A kifejezés értéke. ha be van állítva, ez számított, mivel a deklarált típusnak a funkciót tartalmazó bevallásának, és visszaadja a hívó függvény. Ha a kifejezés elhagyható, a visszatérési érték nincs meghatározva funkciót.
A formai szempontból, az üzemeltetők törni. tovább és vissza nem üzemeltetői strukturált programozás. Azonban használatuk indokolt korlátozott mennyiségben, mivel az megkönnyíti a megértést a programot, és lehetővé teszik, hogy elkerüljék a nagy beágyazott struktúrák. Például, ellenőrizze a bemeneti adatokat az anomáliát. Ha nem használja ezeket a szolgáltatók, akkor az egész folyamat lesz befektetni a feltételes mondat, ami rontja az olvashatóságot a program. Ehelyett, akkor írj egy kis feltételes mondat, amely rendezi a funkcióból való kilépéshez érvénytelen bemeneti adatok.
I / O nem része a C ++ nyelven. és elvégzi azokat a funkciókat, amelyek részei a standard könyvtár. További részletekért lásd. Előadás 4.
// hiba - Ismeretlen visszatérési érték // Jobb
Működés típusa void nem ad vissza értéket. Azonban egy funkció a típusú void nem ad értéket úgy, hogy a függvény típusa: void használhatják a függvényhívás típusát void mint kifejezés a bevallását.
Ez a forma a return utasítás fontos írásakor funkció sablont. ha a visszatérési típus egy sablonparaméterrel.
2.2.1. Inline függvények
A funkció lehet meghatározni a specifikáló inline. Az ilyen függvények ágyazva. Specifier inline mondja a fordítónak, hogy a nyílt helyettesítés általában előnyös, hogy hajtsák végre a funkciója a szervezet működésében hívást, és meg kell próbálnia minden alkalommal generál a hívó megfelelő kódot a beépített függvény létrehozása helyett a funkció kód önmagában (egyszer), majd hívja meg a normál hívás mechanizmus. Soros specifikátor nincs hatással a jelentését a függvényhívás.
Nyissa meg a helyettesítés nem befolyásolja az eredményeket a hívó függvény, eltér a makrót. Beépített függvény szintaxisa a szokásos funkciójának leírását, és függ a vonatkozó szabályok hatálya és típusú ellenőrzés. Nyílt helyettesítés egyszerűen egy megvalósítása a függvényhívás. Generálása helyett a kódot, és az átviteli vezérlő paraméterek az egységes test másolási funkcióval, a másolás funkció a test, megfelelően módosított Egy hívás kerül. Ez időt takarít meg az irányítás átadása.
Az összes, de a legegyszerűbb feladatok futásidőben funkciók uralja a költségek időben ügyeleti szolgálat. Ebből az következik, hogy az összes, de a legegyszerűbb funkciója a megtakarítás rovására nyitott helyettesítés minimális. Az ideális jelölt nyitott helyettesítés olyan funkció, amely nem valami egyszerű, mint a növekedés vagy visszatérési érték. Az ilyen feladatok meglétét teszi szükségessé a kezelés a rejtett adatokat.
2.2.2. Alapértékek funkciók
int g (int m = 1, int n); int h (int m = 1, int n = 2); int h (int m = 1, int n = 2) Int h (int m = 0, int n = 0) int f (int m = 1, int n = 2); int f (int m int n.) f (5, 6); f (5); f ();
// // // Helyes Error Error - ismétlődő alapértelmezett // Error - Az alapértelmezett beállítások megváltoztatásához // Jobb // A funkciót két paraméter // egyenértékű hívja f (5, 2); Ekvivalensen // hívás f (1, 2);
2.2.3. program beállításait
A fő funkciója. mint bármely más funkcióra paramétereket. Ezeket a paramétereket át a programnak a parancssorból.
void main (int argc, char * argv [])
// nevek argc és az argv nem követelmény a nyelv
2.2.4. Funkciók változó számú paramétert
Értelmezése során a paraméter lista egy függvény információ nem áll rendelkezésre a fordító. Ezért nem tudja garantálni, hogy a várt lehetőség nincs igazán jelen, vagy arról, hogy a megfelelő típusú. Nyilvánvaló, hogy ha a paraméter nem adják meg, a fordító nem rendelkezik a szükséges információkkal, hogy végre a szokásos ellenőrzés és az átalakulás típusát.
Ez a funkció csak a be nem jelentett paraméterek, elvileg meg lehet határozni, de nehéz lesz kiválasztani a paramétereket, makrók dolgozni bejelentett paramétereket a neve az utóbbi bejelentette a formális paraméter.
Bent a funkció, a programozó kiválasztásáért felelős a köteg további paramétereket. Velük dolgozni makrók segítségével va_arg. va_start és va_end. stdarg.h meghatározott fájlban.
Egy példa a függvény magyarázó változók száma programok paraméterek, lásd. A végén az előadás.
2.3. preprocessor
Előfeldolgozó - olyan program, amely feldolgozza a szöveget a program a fordító. Így a fordító kap beviteli, amely eltérhet az látja. előfeldolgozó által vezérelt irányelveket. Használata előfeldolgozó műveletet el lehet végezni következő elemeket tartalmazza:- felvétele a program a megadott fájlokat;
- csere azonosítók szekvenciáit szimbólumok;
- makró helyettesítés. azaz Csere elnevezések paraméterezhető szöveg preprocessor kialakítva, hogy megfeleljen a konkrét érvek;
- kizárás az egyes részek a szöveg (feltételes fordítási).
2.3.1. beleértve a fájlokat
Include fájlok felhasználásával előállított #include direktíva. amely a következő szintaxist:
#include<путь>#include "path"
Kacsacsőr valamilyen formai elem.
Az #include direktíva tartalmazza a tartalmát a fájl elérési útját, amely meghatározott fájl összeállított helyett összhangban az irányelvvel. Ha az útvonal hegyes zárójelek közé, akkor a fájl keresi a szabványos könyvtárak. Ha az útvonal idézőjelbe, és teljes mértékben megadva, a fájl megkeresi a megadott könyvtárban, és ha az elérési út nem teljesen meghatározott - az aktuális könyvtárban. Ezzel az irányelvvel, akkor a szövegét is a program, mint a standard, és a fájlokat.
Továbbá, amint azt fentebb jeleztük, a C ++ számos funkciók, mint a bemeneti / kimeneti funkciók, a memória dinamikus, stb Ezek nem része a nyelvnek, mint része a szabványos könyvtárakat. Annak érdekében, hogy szabványos könyvtári funkciókat, szükség van a szövegben a program tartalmazza az úgynevezett header fájlokat (a függvények leírása jelzi, hogy melyik header fájl szükséges hozzá). Ugyanez történik az elpárologtató irányelv #include.
#include direktíva ágyazhatók. Ez azt jelenti, hogy meg tudjanak felelni a fájl tartalmazza a másik #include direktíva. A megengedett szint fészkelő #include irányelvek végrehajtásától függ a fordító.
2.3.2. macrosubstitutions
Macro #define irányelv végrehajtását. amely a következő szintaxist:
#define<идентификатор><текст>#define<идентификатор> (<список параметров> ) <текст>
#define irányelv helyébe lép minden előfordulását az azonosítót a forrás fájlt a szövegben. következő irányelv az azonosító. Ezt a folyamatot nevezik Macro. Az azonosító helyettesíti, ha ez egy külön jelzőt. Például, ha az azonosító része egy hosszabb szöveg, vagy azonosítója, akkor nem kell pótolni.
A szöveg a gyűjtemény zsetont például kulcsszavak, állandók, azonosítók, vagy kifejezés. Egy vagy több szóköz karaktert kell elválasztani a szöveges azonosítót (vagy paramétereit zárójelben). Ha a szöveg nem fér el egy sorban, akkor lehet folytatni a következő sorban, hogy ezt a fajta a sor végét jelző karaktert „backslash” majd azonnal nyomja meg az „ENTER” gombot.
Szöveg elhagyható. Ebben az esetben az összes példányát az ID lesz távolítva a forráskódot. Azonban ő tekinthető egy adott azonosítót.
A paraméterek listáját. ha jelen van, tartalmaz, egy vagy több azonosítót vesszővel elválasztva, és kell zárójelbe téve. Azonosítók a lista eltér egymástól. Körük korlátozott makrók, amelyben kapnak. A nevét a formális paraméterek a szövegben jelölje meg a helyzetbe, amelyben a helyettesített tényleges érvek egy makró hívást.
A makró hívás azonosítója van rögzítve, majd zárójelben listája tényleges érvek megfelelő formális paraméterek a paraméterlista. List valójában formális paramétereket kell tartalmaznia azonos számú elemet. Nem tévesztendő helyettesítése érveket a makró az átviteli függvény érveket. Csere az előfeldolgozó tisztán szöveges karaktert. Bármilyen típusú számítás vagy az átalakulás nem megy végbe.
#define N 100 #define MULT (a, b) ((a) * (b)) #define MAX (x, y) ((x)> (y)). (X). (Y)
Hívás MULT (x + y, z) helyébe ((x + y) * (Z)). Hiányában belső zárójelben fordult (x + y * z). ami nem igaz.
Macrocall MAX (i, a [i ++]) helyébe ((i)> (a [i ++])). (I). (A [i ++])). A számítás eredménye megjósolhatatlan.
Az irányelv #define két jelzőt lehet „ragasztva” együtt. Ehhez szükséges, hogy összekapcsolják védjegyek ## (bal és jobb érvényesek whitespace karakter). Előfeldolgozó egyesíti ezeket a zsetonokat egy. Például, makro #define VAR (i, j) i ## j a makro hívás VAR (x, 6) képez azonosító x6.
A # jel, amely előtt egy makró érv jelzi, hogy alakítani egy karakterlánc. Amikor makróhívást tervezés #<формальный параметр> helyébe "<фактический параметр> ”.
Szövegcseréhez lehet visszafordítani irányelv #undef. amely a következő szintaxist:
#undef <идентификатор>
#undef irányelv törli az aktuális definícióját #define azonosító. Ahhoz, hogy megszünteti a makró, elegendő meghatározni identitását. Megadása paraméter lista nem szükséges. Ez nem hiba kezelhető #undef azonosítót az irányelvet, amely korábban nem került meghatározásra vagy amelyek hatása már törölte.
Elfogadva C / C ++ forma makrónyelvet is komoly hátrány. Most, ebben a formában is elavultnak tekinthető jelenléte miatt alkalmasabb eszköze a nyelv, mint a sablonokat. névtér. inline függvények és konstansok. Hasonlóképpen, a széles körben alkalmazott öntött bármilyen nyelven jelzi a rossz tervezés. Makrók és hogy egy gyakori hibaforrás. Az a tény, hogy meg tudod csinálni anélkül, hogy őket, a programozás C ++ sokkal biztonságosabb és elegánsabb.
2.3.3. feltételes fordítás
Feltételes fordítás biztosított a C ++ nyelven utasításkészlet, amely lényegében nem ellenőrzik összeállításáról és előfeldolgozás. Ezek az irányelvek lehetővé teszik kizárt összeállításához bármely részének az eredeti fájl ellenőrzésével feltételekkel.
#if<константное выражение> [<текст> ] [#elif<константное выражение> [<текст> ]]. [#else [<текст> ]] #endif
Minden #if direktíva ugyanabból a forrásból fájlt meg kell felelnie a végső irányelv #endif. Két #if és #endif irányelvek lehet bármennyi irányelvek #elif, és nem több, mint egy #else irányelvet. Ha #else irányelv jelen van, közte és a #endif irányelv ezen beágyazási szint ne legyen más irányelvek #elif.
Előfeldolgozó kiválasztja a szöveg része feldolgozásra a számítás alapja az állandó kifejezés. követő #if direktíva és #elif. A kijelölt szöveg. követően állandó kifejezés, amelynek értéke „true”. Ha egyik korlátozott állandó kifejezés nem igaz, elpárologtató kiválasztja szöveget. követő #else irányelvet. Ha #else irányelv hiányzik, akkor nincs szöveg kiválasztva.
Egy állandó kifejezés tartalmazhat előfeldolgozó meghatározott művelet (<идентификатор> ). Ez a művelet visszaadja a valódi értéket, ha az előre meghatározott azonosító jelenleg meghatározott, egyébként hamis kifejezés.
#if (sizeof (void *) == 2) #define SDATA #else #define LDATA #endif #if definiált (hitel) hitel (); #elif definiált (terhelési) debit (); #else printerror (); #endif