Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Podmíněný překlad
serial
19. března 2002, 00.00 | Tak jako v jiných jazycích podmíněný překlad v Delphi patří k důležité části jazyka. Pomocí podmíněného překladu lze řešit množství problémů, přičemž pro mnohé z nich je to nejlepší cesta. Podíváme se také na novinky v Delphi 6.
Kdo by neznal. Tak jako v jiných jazycích podmíněný překlad v Delphi patří k důležité části jazyka. Pomocí podmíněného překladu lze řešit množství problémů, přičemž pro mnohé z nich je to nejlepší cesta.
Zhruba v půli článku se podíváme na novinky v Delphi 6, které se týkají podmíněného překladu.
Dalo by se říci, že by vynalezen kvůli potřebě co nejednoduššího zápisu změny množství kódu. Já osobně téměř ve všech programech mám direktivu DEBUG či FULLWARE. Párkrát jsem již si definoval i TRIAL. Je zřejmé, že program zkompilovaný z jednou z těchto direktiv se bude chovat zcela odlišně resp. bude v něm obsažen rozdílný kód a to jen změnou jednoho slova.
První co musíme udělat, chceme-li používat podmíněný překlad je definovat si svoji direktivu. To se provádí následujícím příkladem, kde text může být dle vaší libosti (Delphi všeobecně nerozlišuje velikost písmen).
|
Kdekoliv se pak můžeme testovat je-li resp. není-li již definována. To se provádí přes IFDEF resp. IFNDEF, testujeme-li zda není definována. Bohužel v textu, který následuje nelze používat booleanovskou logiku nepřišel jsem na to a snad ani help se o tom nezmiňuje.
IFDEF resp. IFNDEF lze ještě rozšířit o ELSE. Jedná se spíše o zjednodušení zápisu, protože to co to dovede dokážete i s těmi dvěmi základními. Jednoduchý příklad by mohl vypadat takto:
|
Bude-li nám nějaká definovaná direktiva nepříjemná, můžeme ji kdekoliv odstranit. Použijeme k tomu direktivu UNDEF. Jednoduchý příklad by mohl vypadat takto:
|
Základně existuje několik standardně přidávaných direktiv:
- VER140 verze vašeho Object Pascal compiler, číslo závisí na jeho verzi
- MSWINDOWS resp. LINUX záleží na tom, zda pracujete pro Delphi ve Windows® či Kylixu v Linuxu
- WIN32 pro získání informace na kolika bitovém operačním systému pracujete. Měla by být dostupná hodnota WIN64, tak jako se ve starých Delphi objevovalo WIN16
- CPU386 pro procesory Intel 386 resp. vyšší x86
- CONSOLE pouze v případě, jedná-li se o konsolovou aplikaci.
Mimo to, celý podmínění překlad lze do sebe vnořovat podle manuálu až do 32 úrovně. Zde ne zcela chápu k čemu to je, osobně jsem vždy vystačil s první úrovní. Maximálně druhou, používal-li jsem UNDEF.
Novinka v Delphi 6Kompilátor Delphi 6 zavádí novou direktivu $IF, která na rozdíl od direktivy $IFDEF umožňuje ve výrazech vyhodnocovat i konstanty definované v jazyce Delphi resp. Pascal. Pro testování existence předchozí definice určitého symbolu slouží funkce Defined(), existenci deklarace pascalovské konstanty detekuje funkce Declared(), např.
|
Z příkladu je názorně vidět, že v této části se může používat booleanovská logika.
Ostatní direktivyTuto část shrnu velice rychle a nebudu se u ní moc zastavovat. Existuje množství dalších direktiv, které řídí překlad např. range-checking či I/O checking. Většinu z nich však máte nastavenou přes GUI Delphi v nastavení. Ostatní často není třeba vůbec měnit.
Chcete-li nechat zobrazit jejich aktuální obsah, můžete to udělat opakovaným stiskem Ctrl+O.
Ještě za připomenutí stojí, že některý direktivy jako R, I či L jsou pro připojení dalších zdrojových souborů do projektu. Či existuje jiná (I), která obsluhuje I/O chyby. Ta je mimochodem snad jedna z nejpoužívanějších. Ovšem zajímají-li vás další direktivy více podívejte v nápovědě na kartu Compiler Directives (list).
IFOPT direktivaNavíc existuje direktiva, která se dokáže odkazovat na jednotlivé switche resp. jejich hodnoty. Takto lze velice jednoduše mít kód, který se opět začlení do binárního souboru pouze v případě, že podmínka v direktivně byla splněna. Typicky to lze ukázat na příkladu
|
Je samozřejmé, že se nemusím odkazovat jen na R+, ale na kterýkoliv jiný switch. To se týká i jeho hodnoty, která může být jak +, tak .
Tak a to je vše. Myslím si, že jako ukázka použití je tento článek dostačující. Vlastní praktické použití závisí jen na vás.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007