A makrók a példákat
Makrók C
Most nézzük meg, hogyan kell írni egy makrót, és úgy makro példákat. De először válaszolni a természetes kérdés: miért van szükség a makrók?
Mik azok a makrók?
Mik azok a makrók? Beszélünk makrók makrók C. lehetővé teszi számunkra, hogy egyszerűsítse a program: ahelyett, hogy a mondat, megadhat egy azonosítót is. Vannak makrók szerű funkciók, a szöveg ez a „funkció” helyettesített szakaszában előkezelés a helyén egy hívást, ami potenciálisan növeli a végrehajtási sebesség a program, mert nincs függvényhívás. Ezeket a műveleteket végzi előfeldolgozó. Vannak más előnyei a makrókkal, de vannak hátrányai is, amint azt az alábbiakban tárgyaljuk, amikor viszont a példáját makrók.
#define C - ezt az irányelvet, amelynek meghatározásához használt szimbolikus állandók, azonosítók, makrófüggvények. Makrók angol makro, két fajta ilyen funkciók és hasonló tárgyak. A mi bemutató makrók, fogunk dolgozni az ilyen típusú makrók.
minta makró
Egy példa egy makro-objektumot. Ez a meghatározás a szimbolikus állandók:
Itt megadott szimbolikus konstans
#define SBP "SBP-program"
SBP - egy azonosítót
"SBP-program" - egy karakterlánc, amely kiszorítja a SBP.
#define SBP "SBP-program"
Ha nem adja meg a húr, amely esetben az azonosító a rés, helyettesítheti az azonosítót. például:
Ehelyett azt ki kell cserélni az űrprogram.
Ha a sort permutációs ne kerüljön sor a fájlt, majd alkalmazni a fordított törtjelet kötőjellel. például:
Megjegyezzük, hogy a makrók, az ilyen létesítmények ne fogadja paramétereket.
Ezután úgy a példa a makró funkció.
Példa makró funkció
Tekintsük az egyszerű példája a makro-funkciókat, mint a makrók is nevezik makró:
#define mCircleLength (R) (6,28318 * (R))
ezt a makrót. És mi van definiálva? mCircleLength - a makró nevét. Prefix m azt mondja, hogy ez egy makró, nem egy normális működését. Macro mCircleLength hasonló funkciókat is úgy r paramétert.
Hadd emlékeztessem önöket, hogy a makrók, az ilyen létesítmények ne fogadja paramétereket.
Mi vychilsyaet makro mCircleLength? Ez kiszámítja a hossza a kerülete. 2PI kerülete szorozva a sugár. 2PI = 6,28318.
Előfeldolgozó helyett makróhívást tölti el makro, azaz tulajdonképpen printf vonal nézne ki:
printf ( "\ nCircle hossz =% .2f \ n \ n", (6,28318 * (12)));
Miután a makró nevét a makró definíció az első nyitás előtt tartó lehet szóköz. Ez fontos. Ha a rés, megkapjuk a meghatározása a szimbolikus konstans.
Tekintsük a makróprogramnak
ez vonatkozik zárójelben. Elengedhetetlen az általános esetben. r paraméter zárójelben. És ez fontos.
Íme néhány példa arra, mi történik, ha figyelmen kívül hagyjuk a zárójelben:
#define mSum (param) PARAM + 2
.
int nVar = 10 * mSum (5);
miután a szervezet a makró helyettesítés kapjuk:
int nVar = 10 * 5 + 2;
nVar tárolja száma 52 helyett 70, amit vártunk.
Most tekintsük a következményeit a hiányzó zárójelek paramétert. Ha a paraméter egy összegben kerül át a makró mCircleLength például 1 + 2, megkapjuk:
#define mCircleLength (R) (6,28318 * r)
.
(6,28318 * 1 + 2)
Következtetés: A zárójelek fontosak, sok esetben.
Hogyan kell használni a makró, hogy az objektum egy húr?
Íme egy példa erre a makró:
#define mIntToStr (nVar) (#nVar)
A makro húr operátor (ahogy néha nevezik) hatással lesz a paraméter # nVar, az eredmény fedezi NVAR idézi. kód:
Operator # söpört paraméter 1 + 2 idézetek, fordult be egy szövegkonstans. Ha eltávolítja a # a makró definíció, a makro mIntToStr szor 1 + 2 Macro példa:
Hogyan kell használni a makró összefűzésére húrok?
Vonósok a C kombinálni lehet az üzemeltető ##. Macro példa:
Mutatókat makrók
A makrók használhatók mutatók. Macro példa mutatók:
Ügyeljen arra, hogy a megállapodás a zárójelben a szervezetben a makró.
Helyi változók makrók
A makro, akkor a lokális változókat. Ha a név egy helyi változó egybeesik a nevét a globális, globális változó lesz zárva a helyi makró. De a feladat a lokális változók nem befolyásolják a globális. Macro példa:
Macro Blocks
A makrók használhatók nadrágtartó, így vevő egység. Macro példa:
Kettős kiszámítása Macro
Lehetséges, hogy a makró argumentumértékkel kerül kiszámításra kétszer. Egy példa egy ilyen makró:
Miért ez az eredmény? Növelés ++ nVar állandó kétszer. Ez jobb elkerülni az ilyen megoldásokat.
A pontosvessző makrók
A C-ben a végén a kifejezés, mi tesz egy pontosvessző
Szükség van erre egy makrót? Attól függ, hogy az adott esetben. A fenti „A blokkok makrók” van makró funkció:
Ha eltávolítja a pontosvessző után 10 ebben a példában (lásd. Az egész mintát), a fordító hibát generál.
Más esetekben a jelenléte egy pontosvessző vezet a hiba. Példa (ebben a példában magában foglal egy hibát):
Ebben a példában, a makró bontakozik ki az alábbiak szerint:
ha (nVar> 0)
nVar = 10;
int nNewVar = 1;
más
nVar = 0;
Van megszakadt a kapcsolat között, és ha mást.
Ebben az esetben a makró bontakozik ki az alábbiak szerint:
Az utóbbi lehetőség működik. kód:
Makrók egy változó számú paramétert
Makrók C lehet változó számú paramétert. Ezek a makrók nevezzük variadic makrókat. Egy tipikus példa a variadic makró:
A szabályok a következők:- változókat jelöli a három pontot;
- Ha vannak nevesített paraméterek. Mi változók legyen az utolsó a paraméter listában
- makróprogramnak változók helyére az azonosító __VA_ARGS__
Most, egy példa a makró változó számú paramétert és nevesített paraméterek:
Tehát, ha van paramétereket is, a változók a legújabb a argumentumlista funkciót. Mégis van egy fontos részlet az előző példában: nem tudjuk átadni a null változók száma ebben az esetben. Miért? Mert, ha nem adja át egyetlen változtatható paraméter, miután az utolsó vessző a paraméter listában üres lesz. Itt egy hibás példát:
Ebben az esetben a makró bontakozik ki
Itt a tizedesvessző után nincs lehetőség, de ez egy tévedés, hogy Xi. Következtetés: legalább egy változtatható paraméter kell továbbítani a jelen ügyben.
Fogytán másik makró makró
Futás egy makró másik makró pillantást egy egyszerű példa:
Ez egy ilyen eredmény.