www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

#if

 

Je speciální příkaz C pro tzv. preprocesor, který je informací pro sestavování výsledného zdrojového souboru pro skutečnou kompilaci do strojového kódu. Pomocí této direktivy je možné více specifikovat požadavky na podmíněný překlad. Na rozdíl od #ifdef lze použít #if defined spolu s nějakou logickou operací, např. AND, OR. Ačkoliv se makro definuje (#define) jako znaková posloupnost, v tomhle případě bude znak za názvem makra zpracován jako číslo.

 

 

Jednodušší použití filtrované kompilace pro x (nulové/nenulové):

 

#define VYRAZ obsah

#if VYRAZ

zdrojový text;

#else

zdrojový text;

#endif x

 

Specifičtější použití filtrované kompilace pro x (nulové/ číslo):

 

#define VYRAZ obsah

#if defined (VYRAZ) && VYRAZ==x

zdrojový text pro obsah=x;

#endif

#if defined (VYRAZ) && VYRAZ==y

zdrojový text pro obsah=y;

#endif x

 

Direktiva #if lze analogicky z C použít s příkazem #else. Definovaná zóna za #if musí být ukončena #else nebo #endif. Platnost #if vyraz je také ukončena koncem souboru nebo direktivou #undef vyraz.

 

PŘÍKLAD: #if_1

 

#define KK 0                          //definice symbolické konstanty jako makra (znak ale spíše číslo 0)

int a=22,b=22,c;                      //alokace a inicializace proměnných int

c=a+b;                                    //matematický výpočet

cout<<"c="<<c<<endl;            //výstup na obrazovku pomocí proudu stdout (nezávile na KK)

#if KK                                    //test hodnoty rozvinutého makra KK (false/true)

printf("%d",c);                         //výstup na obrazovku pomocí printf jako DEC

#else                                       //konec překladu pro KK je-li true (jinak)

printf("%x",c);                          //výstup na obrazovku pomocí printf jako HEX

#endif                                      //konec podmíněné zony kompilace

cout<<endl<<"----";                //výstup na obrazovku pomocí proudu stdout (nezávile na KK)

getchar();                                 //čekání na entr

return 0;                                  //výstup z konzolové aplikace

 

Příklad ukazuje využití direktivy #if pro podmíněnou kompilaci a to dle definované hodnoty KK. Ačkoliv pomocí #define KK 0 vytváříme makro, které se rozvine jako by do znaku 0, bude pro příkaz #if podstatná nulová a nenulová hodnota. POZOR: vynechání 0 nelze!! Dle hodnoty (zkuste změnit) se provede analogicky dle if a else z C příslušné bloky zdrojového kódu. Dle KK se kompiluje funkce prinf() s výstupem dekadickým či hexadecimálním. Výstupní proud cout není nijak ovlivněn příkazy preprocesoru a bude kompilován nezávisle na hodnotě KK.

 

PŘÍKLAD: #if_2

 

#define KK 2                                      //definice symbolické konstanty jako makra, znak (číslo) výběru

int a=22,b=22,c;                                 //alokace a inicializace proměnných int

c=a+b;                                                //matematický výpočet

cout<<"c="<<c<<endl;                       //výstup na obrazovku pomocí proudu stdout (nezávisle na KK)

#if KK                                                //test hodnoty rozvinutého makra KK (false/true)

printf("dec=  %d",c);                           //výstup na obrazovku pomocí printf jako DEC, je-li KK>0

#endif                                                  //konec podmíněné zóny kompilace

#if defined(KK) && KK==1              //test na hodnotu znaku (čísla) makra KK

printf("char= %c",c);                            //výstup na obrazovku pomocí printf jako CHAR, je-li KK=1

#endif                                                  //konec podmíněné zóny kompilace

#if defined(KK) && KK==2              //test na hodnotu znaku (čísla) makra KK

printf("hex= %x",c);                             //výstup na obrazovku pomocí printf jako HEX, je-li KK=2

#endif                                                  //konec podmíněné zony kompilace

cout<<endl<<"----";                            //výstup na obrazovku pomocí proudu stdout (nezávisle na KK)

getchar();                                            //čekání na entr

return 0;                                              //výstup z konzolové aplikace

 

Program demonstruje využití direktivy #if pro filtrovanou kompilaci zdrojového textu. Přikazem #define KK je vytvořené makro, za kterým musí být uvedený znak, který po rozvinutí substituuje číselnou hodnotu. První zóna (#if KK) pro kompilaci je akceptována vždy, je-li KK různé od 0. Pomocí příkazu defined(KK) lze filtrování kompilace specifikovat i pomocí hodnoty makra. Pak lze využít logických oparandů AND, OR apod. Dle obsahu makra KK (0,1,2) bude provedená výsledný kompilace, která zobrazí výsledek pomocí funkce printf a to DEC,CHAR nebo HEX.

 

 



Abecední seznam všech článků Vyhledání pojmů ve článcích




Řetězce PHP
Informace o chování řetězců v programování PHP.
php/obsah_php_string.php
JavaScript - ukázky
Příklady užití některých často používaných efektů na stránky.
katalogy/javascript
Mikropočítače a jejich programování
Nízká forma programování, assembler a struktura procesorů.
knihy/mikropocitace/obsah_mikro1.php
Databáze ikon
Ikony a malé obrázky pro tlačítka či jiné použití
datove_zdroje/icony/icony.php
Odkazník o programování
Rejstřík klíčových slov pro programování ve vyhledávačích.
programovani/programovani.php
Weby o programování
Odkazy na velké servery o programování a vývoji SW
odkazy/programovani
Popis HTML formátu
Velikost textu, barva textu, rozvržení stránky, obrázky, barva pozadí se zapisuje pomocí HTML příkazů.
stranky/html_tag
Databáze obrázků
Malé a velké obrázky, podlkady, tlačítka, okrasné čáry a pod.
datove_zdroje/obrazky
Animované obrázky
Animované gify a malé obrázky pro všeobecné využití.
datove_zdroje/animace
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.