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
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).