Do makrók szükséges

Macro - legkínosabb eszköz a C és C ++, egy vérfarkas, bujkál leple alatt egy függvény, a macska sétál magát, és nem fizet a figyelmet a határait a hatálya alá. Vigyázz rá!

megbeszélés

Nehéz megtalálni a nyelv színes ahhoz, hogy kifejezze mindazt, amit szeretnék mondani makrókat. Mindazonáltal adunk néhány idézet.

Makrók számos okból - nagyon kellemetlen dolog, hogy lehet egyszerűen veszélyes. Ez elsősorban annak a ténynek köszönhető, hogy a makró - eszköze helyett a szöveg időpontjában hatályos feldolgozása forráskód előfeldolgozó azaz Mielőtt elkezdené bármilyen szintaktikai és szemantikai ellenőrzése.

Nem szeretem a legtöbb faj és előfeldolgozó makrókat. Az egyik cél a C ++ -, hogy a C előfeldolgozó redundáns (§4.4, 18.§), mert úgy gondolom, hogy ez egy nagy hiba.

Makrók szinte soha nem szükséges C ++. Használata const (§5.4) vagy ENUM (§4.8) meghatározására nyilvánvaló állandók [lásd. ajánlás 15], inline (§7.1.1), hogy elkerülje a felsővezeték a függvényhívás [de látni. ajánlás 8], sablon (13. fejezet) meghatározására családok funkciók és típusok [lásd. ajánlása 64-67], és névtér (§8.2) elkerülése érdekében névütközéshez

Az első szabály alkalmazásáról szóló makro szól: ne használja őket, amíg nincs más választása. Gyakorlatilag bármely makro bizonyítja a nem megfelelő nyelvet, a program vagy a programozó.

A fő probléma a C ++ makrók, hogy néznek ki sokkal vonzóbb, mint azok, amelyek a valóságban. Makrók figyelmen kívül hagyja a körét, figyelmen kívül hagyva más lehetőségek és szabályok nyelv és helyettesíti az összes szimbólumot, amelyek felülbírálják a #define direktíva. amíg a legvégén a fájlt. Alkalmazás makrók néz ki, mint egy név vagy függvényhívás, de semmi köze velük. Makrók „egészségtelen”, abban az értelemben, hogy lehet hirtelen kinyílt, és a turn a szövegkörnyezettől függően a használatuk a különféle minták. Behelyettesítve szöveg, futtathat egy makrót teszi az írást legalább egy kis fokú „tisztességes” makro mix a művészet és a fekete mágia.

Programozók, akik úgy vélik, hogy a legnehezebb megfejteni kapcsolatos hibák sablonok, valószínűleg csak soha nem foglalkozott a rosszul megírt vagy helytelen használat makrókat. A sablonok része a C ++ típusok és így lehetővé teszi a fordító sokkal jobb, hogy foglalkoznak velük, mint a makrók, amelyek kevés köze van a programozási nyelv. Még rosszabb, hogy ellentétben a sablonokat rossz makrók lehetnek kitéve a valami, ami miatt véletlen összeállított, nem rendelkezik semmilyen értelemben. Végül egy hiba a makró észlelésekor csak a makró, hanem annak meghatározását.

Még azokban a ritka esetekben, amikor a makrók használatát indokolja (lásd. § a kivételnek), akkor nem is gondol, hogyan kell írni egy makrót, ami egy gyakori szó vagy rövidítés. Az összes makrót a lehető leghamarabb, használja #undef irányelvet. Mindig így számukra szokatlan csúnya nevek nagybetűvel, miközben elkerüli a forgalomba őket header fájlokat.

Példa. Transfer példányosıtási makró sablont. A makrók értik eléggé csak zárójelben, és szögletes zárójelben. A C ++ azonban definiál egy új design hegyes zárójelek használt sablonokat. Makrók nem tudja kezelni ezt a helyzetet, hogy a hívás

makró érzékeli, mintha eltelt két érv, nevezetesen Foo. míg valójában, ez a szerkezet egy tárgy C ++.

kivételek

A makrók az egyetlen lehetséges megoldás néhány fontos feladatokat, mint például a védelem a #include direktíva (vö. 24., ajánlás), használja #ifdef és #ha meghatározott irányelvek feltételes elkészítésében és megvalósításában érvényesíteni (lásd. Ajánlás 68).

Ha feltételes fordítás (például rendszer-függő rész) kerülik elterjedt az egész szövegben #ifdef irányelveket. Ehelyett a legjobb módja annak, hogy a programunkat úgy, hogy az a makró lehetőséget biztosít alternatív megvalósítások egy közös felületet, amelyet aztán a programban használt.

Lehetőség van (de csak óvatosan) makrókat helyett nagy mennyiségű másolás és illessze kódrészletek közel.

17. Kerülje mágikus számok

Ne használja a kódot konstansok, mint a 42. vagy 3,1415926. Ezek az állandók nem magától értetődő, és bonyolultabbá kód követés, hiszen be jellegtelen megjelenése átfedések. Használata helyett a szimbolikus nevek és kifejezések, mint a szélesség * ASPECTRATIO.

megbeszélés

Nevek adunk az információt, és vezessen be egy ponton támogatás; velük ellentétben duplikált egész programot rutin anonim és nehezen karbantarthatóság. Az állandók kell listák vagy const-értékeket, és alkalmazási körének és neveket.

Egy szám 42 nem lehet ugyanazt a számot 42 mint a másik. Tovább ront a helyzeten, a programozó végezheti számítás „az elme” (például: „Ez a 84 - csak kétszerese a 42 volt az öt fenti sorokban”), amely teljesen összezavarja a kódot, és teszi a későbbi pótlás 42 különböző állandó forrása a hatalmas hibák száma .

Példa 1. Fontos állandóit a domain szintű névtereket.

2. példa Az állandók specifikus egy adott osztályban. Megadhatjuk statikus szerves állandó az osztály definíciója; állandók más típusú igényel külön meghatározása vagy a rövid funkciókat.

18. állapítsa változók, mint akkor lokálisan

Kerülje „felfújása” hatókörét. Változókat kell a lehető legkisebb, és az idő az életük - a lehető legrövidebb. Ez az ajánlás tulajdonképpen egy speciális esete a 10 ajánlások.

megbeszélés

Változók, amelyeknek az élettartama nagyobb, mint amennyi szükséges, számos hátránya van.

Azt, hogy a program nehezen érthető, és követte. Például, ha a kód, hogy frissítse a pálya vonalának modulszintű must, ha csak változtatni a jelenlegi meghajtót?

Ezek eltömítheti keretében a nevüket. Ennek közvetlen következménye az, hogy a változók a névtér szinten a leginkább látható az összes többi, és ezzel egyidejűleg a legrosszabb (vö. 10., ajánlás).

Lehet, hogy nem mindig volt megfelelő. Soha, hogy egy változót, mielőtt megfelelően inicializálni azt. Inicializált változók - a forrása a „burjánzó” hibák az összes programot a C és C ++, és különös figyelmet igényelnek annak a ténynek köszönhető, hogy nem mindig lehet kimutatni a fordító (lásd ajánlás 19.).

Különösen régebbi verziói C igényelnek változók határozzák meg csak az elején hatályát; ebben a stílusban C ++ használaton kívül van. Egy komoly probléma ez a korlátozás, hogy gyakran elején hatálya nem áll rendelkezésre elegendő információ változók inicializálása. Ennek eredményeként, akkor marad két választás - vagy változók inicializálása néhány alapértelmezett értéket (pl nulla), amely általában a pazarló és hibákhoz vezethet (ha a változót használjuk, mielőtt lesz egy értelmes érték), vagy hagyja őket nem hozzárendelt, hogy veszélyes. Egy inicializált változó felhasználó által definiált típus samoinitsializirovatsya néhány üres értéket.

A kezelés a betegség nagyon egyszerű -, hogy meghatározza az egyes változók, mint a helyi, mint akkor, ami általában azt jelenti megelőző pontig, az első használat, ha van elég adat a megfelelő elindulni.

kivételek

Néha a teljesítmény előnyös lehet, hogy a pénzbírság változó külső hurok (lásd. 9. ajánlás).

Mivel az állandók nem része a programnak, ez az ajánlás nem alkalmazható rájuk (vö. 17., ajánlás).

Kapcsolódó cikkek