Rozdiel medzi inline a makro v C ++
Obsah
Makro je inštrukcia, ktorá sa rozširuje v čase jej vyvolania. Funkcie môžu byť definované, napríklad makrá. Podobne sa inline funkcie rozširujú aj v okamihu jej vyvolania. Jeden primárny rozdiel medzi inline a makro funkciou je, že vložené funkcie sa počas roka rozširujú zostaveniea makra sú rozšírené, keď je program spracovaný programom preprocesor.
Poďme študovať rozdiel medzi vloženými a makro pomocou porovnávacej tabuľky.
- Porovnávacia tabuľka
- definícia
- Kľúčové rozdiely
- záver
Porovnávacia tabuľka
Základ pre porovnanie | V rade | makro |
---|---|---|
základné | Inline funkcie sú analyzované kompilátorom. | Makrá sú rozšírené o preprocesor. |
syntax | inline return_type funct_name (parametre) {. , , } | #define macro_name char_sequence |
Použité kľúčové slová | v rade | #define |
definovaný | Môže byť definovaný vo vnútri alebo mimo triedy. | Definuje sa vždy na začiatku programu. |
ohodnotenie | Hodnotí argument iba raz. | Vyhodnotí argument vždy, keď sa použije v kóde. |
expanzia | Kompilátor nemusí vložiť a rozšíriť všetky funkcie. | Makrá sa vždy rozširujú. |
automatizácia | Krátke funkcie definované vo vnútri triedy sa automaticky prevedú na vložené funkcie. | Makrá by sa mali definovať osobitne. |
prístup | Funkcia vloženého člena má prístup k dátovým členom triedy. | Makrá nemôžu byť nikdy členmi triedy a nemôžu mať prístup k dátovým členom triedy. |
ukončenie | Definícia inline funkcie sa končí zloženými zátvorkami na konci inline funkcie. | Definícia makra končí novým riadkom. |
ladenie | Ladenie je jednoduché pre inline funkciu, pretože kontrola chýb sa vykonáva počas kompilácie. | Ladenie je pre makrá náročné, pretože pri kompilácii nedochádza ku kontrole chýb. |
viazanie | Inline funkcia spája všetky príkazy v tele funkcie veľmi dobre, pričom telo funkcie začína a končí s zloženými zátvorkami. | Makro čelí problému s väzbou, ak má viac ako jedno vyhlásenie, pretože nemá žiadny symbol ukončenia. |
Definícia Inline
Vložená funkcia vyzerá ako bežná funkcia, ale pred ňou je kľúčové slovo „v rade". Inline funkcie sú funkcie s krátkou dĺžkou, ktoré sa namiesto vyvolávania rozširujú v mieste svojho vyvolania. Poďme pochopiť vložené funkcie s príkladom.
#include Vo vyššie uvedenom programe som deklaroval a definoval funkciu inicializovať (), ako vloženú funkciu v triede „príklad“. Kód funkcie Initialization () sa rozšíri tam, kde je vyvolaný objektom triedy „example“. Funkčné zobrazenie () definované v príklade class nie je deklarované inline, ale kompilátor ho môže považovať za vložené, pretože v C ++ je funkcia definovaná vo vnútri triedy automaticky zostavená inline kompilátorom vzhľadom na dĺžku funkcie. Makro je „smernica preprocesorov“. Pred kompiláciou program preskúma preprocesor a všade, kde nájde makro v programe, nahradí ho jeho definíciou. Preto sa makro považuje za „náhradu“. Pozrime sa na príklad makra. #include Vo vyššie uvedenom kóde som deklaroval makro funkciu GREATER (), ktorá porovnáva a nachádza väčší počet obidvoch parametrov. Môžete si všimnúť, že neexistuje žiadny bodkočiarka na ukončenie makra, pretože makro je ukončené iba novým riadkom. Pretože makro je len náhradou, rozšíri kód makra, kde je vyvolané. Vložené funkcie sú omnoho presvedčivejšie ako funkcie makro. C ++ tiež poskytuje lepší spôsob, ako definovať konštantu, ktorá používa kľúčové slovo „const“.
Definícia makra
záver: