Doporučená, 2021

Redakce Choice

Rozdíl mezi Inline a Macro v C ++

Makro je instrukce, která se rozšiřuje v okamžiku jejího vyvolání. Lze také definovat funkce, například makra. Podobně se funkce inline také rozšiřují v okamžiku jeho vyvolání. Jeden primární rozdíl mezi funkcí inline a makro je, že funkce inline jsou rozšířeny během kompilace a makra jsou rozšířena při zpracování programu preprocesorem .

Studujme rozdíl mezi inline a makro pomocí srovnávací tabulky.

Srovnávací graf

Základ pro porovnáníV souladuMakro
ZákladníInline funkce jsou analyzovány překladačem.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ýMůže být definován uvnitř nebo mimo třídu.Je vždy definován na začátku programu.
HodnoceníVyhodnocuje argument pouze jednou.Vyhodnocuje argument při každém jeho použití v kódu.
RozšířeníKompilátor nemusí inline a rozšířit všechny funkce.Makra jsou vždy rozšířena.
AutomatizaceKrátké funkce definované uvnitř třídy jsou automaticky provedeny na inline funkce.Makra by měla být definována specificky.
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 funkce inline končí zakončovacími závorkami na konci inline funkce.Definice makra končí novým řádkem.
LaděníLadění je snadné pro inline funkci, protože během kompilace se provádí kontrola chyb.Ladění se stává obtížným pro makra, protože během kompilace nedochází ke kontrole chyb.
VazbaFunkce inline váže všechny příkazy v těle funkce velmi dobře jako tělo funkce začíná a končí se složenými závorkami.Makro čelí problému vazby, pokud má více než jeden příkaz, protože nemá žádný symbol ukončení.

Definice inline

Funkce inline vypadá jako běžná funkce, ale předchází jí klíčové slovo „ inline “. Inline funkce jsou funkce krátké délky, které jsou rozšířeny v okamžiku jeho vyvolání, namísto volání. Pojďme pochopit inline funkce s příkladem.

 #include using namespace std; příklad třídy {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

Ve výše uvedeném programu jsem deklaroval a definoval funkci initialization (), jako inline funkci ve třídě „example“. Kód funkce initialization () se rozšíří tam, kde je vyvolán objektem třídy „example“. Zobrazení funkce (), definované v příkladu třídy, není deklarováno inline, ale může být považováno kompilátorem za inline, jako kompilátor v C ++ funkce definovaná uvnitř třídy kompilátor automaticky provede inline s ohledem na délku funkce.

  • Funkce inline snižuje režii volání funkcí a vracení, což zase snižuje dobu provádění programu. Argumenty jsou také vkládány do zásobníku a registry jsou ukládány, když je funkce volána a resetována, když se funkce vrací, což vyžaduje určitý čas, což je zabráněno funkcí inline, protože pokaždé není potřeba vytvářet lokální proměnné a formální parametry. .
  • Vložené funkce mohou být členy třídy a mohou také přistupovat k datovému členovi třídy.
  • Inline funkce snižuje dobu provádění programu, ale někdy, pokud je délka inline funkce větší, pak se velikost programu zvýší také z důvodu duplikovaného kódu. Proto je dobré zavést velmi malé funkce.
  • Argument funkce inline je vyhodnocen pouze jednou.

Definice makra

Makro je „předprocesorová směrnice“. Před kompilací je program prozkoumán preprocesorem a tam, kde v něm program najde, nahradí toto makro jeho definicí. Makro je tedy považováno za „nahrazení textu“. Podívejme se na makro s příkladem.

 #include #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ává a nalézá větší počet obou parametrů. Všimněte si, že neexistuje žádné středník pro ukončení makra, protože makro je ukončeno pouze novým řádkem. Jako makro je pouze nahrazení textu, rozbalí kód makra, kde je vyvolán.

  • Makra jsou vždy definována velkými písmeny, aby programátoři mohli snadno číst všechna makra v programu.
  • Makro nemůže být nikdy členskou funkcí třídy, ani nemůže přistupovat k datovým členům žádné třídy.
  • Funkce makro vyhodnocuje argument při každém jeho výskytu, což má za následek neočekávaný výsledek.
  • Makro musí být menší velikosti, protože větší makra zbytečně zvětší velikost kódu.

Klíčové rozdíly mezi inline a makro

  1. Základní rozdíl mezi inline a makro je, že funkce inline jsou analyzovány kompilátorem, zatímco makra v programu jsou rozšířena preprocesorem.
  2. Klíčové slovo použité k definování inline funkce je „ inline “, zatímco klíčové slovo použité k definování makra je „ #define “.
  3. Jakmile je funkce inline dekódována uvnitř třídy, může být definována 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 je při kompilaci evalován pouze jednou, zatímco argumenty maker jsou vyhodnoceny při každém použití makra v kódu.
  5. Kompilátor nemusí inline a rozšířit všechny funkce definované uvnitř třídy. Na druhou stranu makra jsou vždy rozšířena.
  6. Krátká funkce, která je definována uvnitř třídy bez klíčového slova inline, je automaticky provedena inline funkcí. Na druhé straně by mělo být definováno makro.
  7. Funkce, která je inline, může přistupovat ke členům třídy, zatímco makro nemůže nikdy přistupovat ke členům třídy.
  8. Pro ukončení inline funkce je vyžadována uzavřená složená závorka, zatímco makro je ukončeno začátkem nového řádku.
  9. Ladění je snadné pro inlne funkci, protože je kontrolováno během kompilace pro jakoukoliv chybu. Na druhé straně makro není kontrolováno při kompilaci, takže ladění makra se stává obtížným.
  10. Být funkce inline funkce svázat jeho členy uvnitř startu a uzavřené složené závorky. Na druhou stranu makro nemá žádný symbol ukončení, takže vazba se stává obtížnější, když makro obsahuje více než jeden příkaz.

Závěry:

Funkce inline 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“.

Top