Rozdíl mezi vloženými a makry v C ++

Autor: Laura McKinney
Datum Vytvoření: 2 Duben 2021
Datum Aktualizace: 9 Smět 2024
Anonim
Rozdíl mezi vloženými a makry v C ++ - Technologie
Rozdíl mezi vloženými a makry v C ++ - Technologie

Obsah


Makro je instrukce, která se rozšiřuje v okamžiku jejího vyvolání. Lze také definovat funkce, jako jsou makra. Podobně se inline funkce také rozšiřují v okamžiku svého vyvolání. Jedním primárním rozdílem mezi inline a makro funkcí je, že vložené funkce jsou rozšířeny během sestavení, a makra jsou rozšířeny, když je program zpracován preprocesor.

Pojďme studovat rozdíl mezi vloženými a makry pomocí srovnávacího grafu.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníV souladuMakro
Základní Inline funkce jsou analyzovány kompilátorem.Makra jsou rozšířena o preprocesor.
Syntaxinline return_type funct_name (parametry) {. . . }#define macro_name char_sequence
Použitá klíčová slovav souladu
#definovat
DefinovanýLze ji definovat uvnitř nebo vně třídy.Je vždy definována na začátku programu.
HodnoceníVyhodnotí argument pouze jednou.Vyhodnotí argument pokaždé, když je použit v kódu.
Rozšíření Kompilátor nemusí vložit a rozšířit všechny funkce.Makra se vždy rozšiřují.
AutomatizaceKrátké funkce definované uvnitř třídy jsou automaticky vytvářeny na vložené funkce.Makra by měla být definována konkrétně.
PřístupFunkce vloženého člena může přistupovat k datovým členům třídy.Makra nemohou být nikdy členy třídy a nemohou přistupovat k datovým členům třídy.
UkončeníDefinice inline funkce končí s složenými závorkami na konci inline funkce.Definice makra končí novým řádkem.
LaděníLadění je snadné pro inline funkci, protože kontrola chyb se provádí během kompilace.Ladění je pro makra obtížné, protože během kompilace nedochází ke kontrole chyb.
VazbaInline funkce váže všechny příkazy v těle funkce velmi dobře, zatímco tělo funkce začíná a končí složenými závorkami.Makro čelí problému s vazbou, pokud má více než jeden příkaz, protože nemá žádný symbol ukončení.


Definice Inline

Inline funkce vypadá jako normální funkce, ale předchází jí klíčové slovo „v souladu“. Inline funkce jsou funkce s krátkou délkou, které se místo vyvolání rozšiřují v místě jeho vyvolání. Pojďme pochopit vložené funkce s příkladem.

#zahrnout pomocí oboru názvů std; příklad třídy {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} neplatné zobrazení () {cout << a << "" <

Ve výše uvedeném programu jsem deklaroval a definoval funkci inicializovat (), jako vloženou funkci ve třídě „příklad“. Kód funkce Initialization () se rozšíří tam, kde je vyvolán objektem třídy „example“. Funkční displej (), definovaný v příkladu třídy, není deklarován inline, ale kompilátor jej může považovat za inline v C ++ jsou funkce definované uvnitř třídy automaticky vytvářeny inline kompilátorem vzhledem k délce funkce.


  • Funkce inline snižuje režii volání a návratu funkce, což zase zkracuje dobu provádění programu.Argumenty jsou také tlačeny do zásobníku a registry jsou ukládány, když je funkce vyvolána, a resetovány, když je funkce vrácena, což zabere čas, tomu se inline funkce vyhnou, protože není třeba vytvářet místní proměnné a formální parametry pokaždé .
  • Vložené funkce mohou být členem třídy a mohou také přistupovat k datovému členu třídy.
  • Inline funkce zkracuje dobu provádění programu, ale někdy, pokud je délka inline funkce větší, pak se velikost programu zvýší také díky duplikovanému kódu. Z tohoto důvodu je dobré zdůraznit velmi malé funkce.
  • Argument funkce inline je vyhodnocen pouze jednou.

Definice makra

Makro je „směrnice preprocesorů“. Před kompilací je program prozkoumán preprocesorem a pokud vůbec najde makro v programu, nahradí toto makro jeho definicí. Proto je makro považováno za „náhradu“. Pojďme studovat makro s příkladem.

#zahrnout #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Větší z 10 a 20 je" << GREATER ("20", "10") << " n"; návrat 0; }

Ve výše uvedeném kódu jsem deklaroval makro funkci GREATER (), která porovná a najde větší počet obou parametrů. Můžete si všimnout, že neexistuje žádný středník pro ukončení makra, protože makro je ukončeno pouze novým řádkem. Protože makro je jen náhradou, rozšíří kód makra, kde je vyvoláno.

  • Makra jsou vždy definována velkými písmeny, aby programátoři mohli snadno číst všechna makra v programu při čtení.
  • Makro nikdy nemůže být členskou funkcí třídy ani nemůže přistupovat k datovým členům žádné třídy.
  • Funkce makro vyhodnotí argument pokaždé, když se objeví v jeho definici, což má za následek neočekávaný výsledek.
  • Makro musí mít menší velikost, protože větší makra zbytečně zvětší velikost kódu.
  1. Základní rozdíl mezi vloženým a makrem spočívá v tom, že kompilátor analyzuje inline funkce, zatímco makra v programu jsou rozšířena o preprocesor.
  2. Klíčové slovo použité k definování inline funkce je „v souladu“Zatímco klíčové slovo použité k definování makra je„#definovat“.
  3. Jakmile je vložená funkce decalre uvnitř třídy, lze ji definovat buď uvnitř třídy, nebo mimo třídu. Na druhé straně je makro vždy definováno na začátku programu.
  4. Argument předaný inline funkcím se při kompilaci hodnotí pouze jednou, zatímco argument makra se vyhodnocuje pokaždé, když se v kódu použije makro.
  5. Kompilátor nemusí inline a rozšiřovat všechny funkce definované uvnitř třídy. Na druhou stranu, makra se vždy rozšiřují.
  6. Krátká funkce, která je definována uvnitř třídy bez vloženého klíčového slova, se automaticky vytvoří jako vložené funkce. Na druhé straně by mělo být makro definováno konkrétně.
  7. Funkce, která je vložena, může přistupovat k členům třídy, zatímco makro nemůže nikdy přistupovat k členům třídy.
  8. Pro ukončení funkce inline je vyžadována uzavřená složená rovnátka, zatímco makro je ukončeno začátkem nového řádku.
  9. Ladění je snadné pro funkce inlne, protože je během kompilace zkontrolováno, zda neobsahuje nějaké chyby. Na druhou stranu makro není při kompilaci kontrolováno, takže ladění makra je obtížné.
  10. Jako funkce je inline funkce vázána svými členy v počátečních a uzavřených složených závorkách. Na druhé straně makro nemá žádný symbol ukončení, takže vazba se stává obtížnou, když makro obsahuje více než jeden příkaz.

Závěry:

Vložené funkce jsou mnohem přesvědčivější než funkce makro. C ++ také poskytuje lepší způsob, jak definovat konstantu, která používá klíčové slovo „const“.