User Manual
75
4.4.11. Preprocesor jazyka C
V této kapitole stručně probereme preprocesor jazyka C, který se již používal v předchozích
ukázkových programech na řádku: #include "RP6RobotBaseLib.h"!
Preprocesor vyhodnotí tento příkaz ještě před spuštěním kompilačního procesu GCC.
Příkazová řádka #include "file" vloží obsah specifikovaného souboru do vkládaného
místa. Náš ukázkový program vloží soubor RP6BaseLibrary.h, který poskytuje definice všech
uživatelsky dostupných funkcí a řídí zpracování překladu. Možnosti preprocesoru mají však
několik dalších voleb a umožňují definici konstant (které mohou obshovat pevné hodnoty
systému):
#define THIS_IS_A_CONSTANT 123
Tento výraz definuje textovou konstantu “THIS_IS_A_CONSTANT“ s hodnotou “123”.
Preprocesor jednoduše nahradí všechny odkazy definovanou hodnotou. Konstanty mohou být
chápány jako náhrada textu! V následujícím výrazu:
writeInteger(THIS_IS_A_CONSTANT,DEC);
bude “THIS_IS_A_CONSTANT” nahrazen hodnotou “123” a shodně:
writeInteger(123,DEC);
(mimochodem: parametr “DEC” ve funkci writeInteger je jen další konstanta – v tomto případě
definiční konstanta číselného základu hodnoty 10 – pro desítkový číselný systém).
Preprocesor také ovládá jednoduché podmínky if:
Textový výstup se vytvoří pouze při definici “DEBUG” (nemusíte do ní přiřazovat hodnotu –
stačí jednoduše definovat DEBUG). To je užitečné při aktivaci několika textových výstupů pro
ladění během vývoje programu, zatímco při normálním překladu můžete odstranit všechny
pomocné textové výstupy úpravou jediné řádky. Bez definice DEBUG v předchozím ukázkovém
programu zabrání preprocesor průchodu obsahu programového řádku 7 do kompilátoru.
Knihovna RP6Library také nabízí makra, které se definují pomocí výrazu #define. Makra
umožňují zpracování parametrů podobně jako funkce. Následující příklad ukazuje typickou
definici makra:
#define setStopwatch1(VALUE) stopwatches.watch1 = (VALUE)
Tato definice vám umožňuje volat makro stejně jako normální funkci (tj.
setStopwatch1(100);).
Důležitý detail: za definicemi preprocesoru se obvykle nevkládá středník!