Sdílet prostřednictvím


# define směrnice (C/C++)

#define Vytvoří makro, což je sdružení identifikátoru nebo parametrizovanou identifikátor token řetězec.Po definování makra kompilátor nahradit token řetězec každý výskyt identifikátor ve zdrojovém souboru.

Syntaxe

#defineidentifikátortoken řetězecopt

#defineidentifier(identifieropt,...,identifieropt)token-stringopt

Poznámky

#define Směrnice způsobí, že kompilátor náhradní token řetězec každý výskyt identifikátor ve zdrojovém souboru.Identifikátor nahrazuje pouze v případě, že jej tvoří token.Identifikátor v komentář v řetězci nebo jako součást delší identifikátor není nahrazen.Další informace naleznete v tématu Tokeny C++.

Token řetězec argument sestává z řady tokenů jako klíčová slova, konstanty nebo kompletní výkazy.Jeden nebo více znaků mezer musíte oddělit token řetězec z identifikátor.Toto prázdné místo není považován za součást nahrazený text ani je prázdné místo, která následuje poslední token text.

A #define bez token řetězec odebere výskytů identifikátor ze zdrojového souboru.Identifikátor zůstává definovány a zkoušejí s použitím #if defined a #ifdef směrnic.

Druhý formulář syntaxe definuje funkce podobné makra s parametry.Tento formulář je možné zadat volitelný seznam parametrů, které musí být uvedeny v závorkách.Poté, co je makro definováno, každý další výskyt identifikátor( identifikátoropt,..., identifikátoropt ) je nahrazen verzí token řetězec argument, který obsahuje skutečné argumenty nahrazeno formálních parametrů.

Názvy formálních parametrů se zobrazí v token řetězec k označení míst, kde jsou nahrazeny skutečnými hodnotami.Každý název parametru se mohou objevit vícekrát v token řetězec, a názvy se může objevit v libovolném pořadí.Počet argumentů ve volání musí odpovídat počet parametrů v definici makra.Svobodné použití závorek zaručuje správnou interpretaci složité skutečné argumenty.

V seznamu formálních parametrů jsou odděleny čárkami.Každý název v seznamu musí být jedinečný a seznamu musí být uzavřeny v závorkách.Mezery lze oddělit identifikátor a levou závorku.Řetězení řádků použít – umístěte zpětné lomítko (\) bezprostředně před se znakem – dlouhé směrnic na více řádcích zdroje.Obor názvu formálních parametrů rozšiřuje na nový řádek, který končí token řetězec.

Při makro definováno ve druhém formuláři syntaxe, označují následující textové instance následuje seznam argumentů volání makra.Skutečné argumenty, které následuje instanci identifikátor ve zdrojovém souboru se shodují s odpovídajícími parametry formální definice makra.Každý parametr formální token řetězec , nesmí předcházet stringizing (#), charizing (#@), nebo vložením token (##) operátor, nebo nenásleduje ## operátor, nahrazuje odpovídající skutečné argument.Makra v argumentu skutečné rozbaleny před směrnice nahradí formálních parametrů.(Hospodářské subjekty, které jsou popsány v Předprocesoru operátory.)

Následující příklady maker s argumenty ilustrují druhém #define syntaxe:

// Macro to define cursor lines 
#define CURSOR(top, bottom) (((top) << 8) | (bottom))

// Macro to get a random integer with a specified range 
#define getrandom(min, max) \
    ((rand()%(int)(((max) + 1)-(min)))+ (min))

Argumenty s vedlejší účinky způsobit neočekávané výsledky makra.Daný parametr formální může zobrazit více než jednou v token řetězec.Pokud formální parametru se nahrazuje výraz s vedlejší účinky, může výraz s jeho vedlejší účinky vyhodnotit více než jednou.(Viz příklady v Vkládání Token operátor (#).)

#undef Směrnice způsobí, že definice preprocesoru identifikátor se zapomněli.Viz #undef směrnice Další informace.

Pokud dojde k název makra definované v token řetězec (i v důsledku jiné rozšíření makra), není rozbalené.

Druhý #define pro makro s názvem generuje upozornění, pokud druhý token sekvence je stejný jako první.

Konkrétní společnosti Microsoft

Microsoft C/C++ umožňuje předefinovat makro, pokud je syntakticky shodné s původní definici nové definice.Jinými slovy dvě definice mohou mít názvy různých parametrů.Toto chování se liší od ANSI C, vyžaduje dvě definice lexically shodné.

Například následující dvě makra jsou identické, kromě názvů parametrů.ANSIC nepovoluje takové vymezení, ale Microsoft C/C++ je zkompiluje bez chyby.

#define multiply( f1, f2 ) ( f1 * f2 )
#define multiply( a1, a2 ) ( a1 * a2 )

Na druhé straně následující dvě makra nejsou stejné a bude generovat upozornění Microsoft C/C++.

#define multiply( f1, f2 ) ( f1 * f2 )
#define multiply( a1, a2 ) ( b1 * b2 )

Konec konkrétní společnosti Microsoft

Tento příklad ukazuje #define směrnice:

#define WIDTH       80
#define LENGTH      ( WIDTH + 10 )

První příkaz definuje identifikátor WIDTH jako celočíselná konstanta 80 a definuje LENGTH v WIDTH a celočíselná konstanta 10.Každý výskyt LENGTH se nahrazuje (WIDTH + 10).V zapnutí každý výskyt WIDTH + 10 se nahrazuje výraz (80 + 10).Závorky okolo WIDTH + 10 jsou důležité, protože se budou řídit výkladu v například následující příkazy:

var = LENGTH * 20;

Po úpravě před zpracováním fáze prohlášení bude:

var = ( 80 + 10 ) * 20;

které vyhodnocen jako 1800.Bez závorek výsledek je:

var = 80 + 10 * 20;

který vyhodnocuje 280.

Konkrétní společnosti Microsoft

Definování makra a konstanty se /D volba kompilátoru má stejný účinek jako použití #define předzpracování směrnice na začátku souboru.Parametr /D lze definovat až 30 makra.

Konec konkrétní společnosti Microsoft

Viz také

Referenční dokumentace

Direktivy preprocesoru