Rozdíl mezi vloženými a makry v C ++
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.
- Srovnávací tabulka
- Definice
- Klíčové rozdíly
- Závěr
Srovnávací tabulka
Základ pro srovnání | V souladu | Makro |
---|---|---|
Základní | Inline funkce jsou analyzovány kompilátorem. | Makra jsou rozšířena o preprocesor. |
Syntax | inline return_type funct_name (parametry) {. . . } | #define macro_name char_sequence |
Použitá klíčová slova | v 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í. |
Automatizace | Krá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řístup | Funkce 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. |
Vazba | Inline 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 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. 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 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. 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“.
Definice makra
Závěry: