Rozdiel medzi inline a makro v C ++

Autor: Laura McKinney
Dátum Stvorenia: 2 Apríl 2021
Dátum Aktualizácie: 10 Smieť 2024
Anonim
Rozdiel medzi inline a makro v C ++ - Technológie
Rozdiel medzi inline a makro v C ++ - Technológie

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.

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnanieV rademakro
základné Inline funkcie sú analyzované kompilátorom.Makrá sú rozšírené o preprocesor.
syntaxinline 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.
ohodnotenieHodnotí 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áciaKrátke funkcie definované vo vnútri triedy sa automaticky prevedú na vložené funkcie.Makrá by sa mali definovať osobitne.
prístupFunkcia 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čenieDefinícia inline funkcie sa končí zloženými zátvorkami na konci inline funkcie.Definícia makra končí novým riadkom.
ladenieLadenie 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.
viazanieInline 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 pomocou namespace std; príklad triedy {int a, b; public: inline inid initialize (int x, int y) {a = x; b = y} neplatné zobrazenie () {cout << a << "" <

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.


  • Inline funkcia znižuje réžiu volania a návratu funkcií, čo zase znižuje čas vykonávania programu.Argumenty sa tiež tlačia do zásobníka a registre sa ukladajú, keď sa volá funkcia, a resetujú sa, keď sa funkcia vráti, čo si vyžaduje čas, inline funkciami sa tomu zabráni, pretože nie je potrebné zakaždým vytvárať miestne premenné a formálne parametre. ,
  • Inline funkcie môžu byť členom triedy a môžu mať tiež prístup k dátovému členu triedy.
  • Inline funkcia skracuje čas vykonávania programu, ale niekedy, ak je dĺžka inline funkcie väčšia ako potom, sa veľkosť programu tiež zvýši kvôli duplicite kódu. Preto je dobré zdôrazniť veľmi malé funkcie.
  • Argument inline funkcie sa vyhodnocuje iba raz.

Definícia makra

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 #define VEĽKÝ (a, b) ((a <b)? b: a) int main (void) {cout << "Väčší z 10 a 20 je" << VELKÝ ("20", "10") << " n"; návrat 0; }

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é.

  • Makrá sú vždy definované veľkými písmenami, aby programátorom uľahčili identifikáciu všetkých makier v programe počas čítania.
  • Makro nemôže byť nikdy funkciou člena triedy, ani nemôže mať prístup k dátovým členom akejkoľvek triedy.
  • Funkcia makro vyhodnotí argument zakaždým, keď sa objaví v jeho definícii, čoho výsledkom je neočakávaný výsledok.
  • Makro musí mať menšiu veľkosť, pretože väčšie makrá zbytočne zväčšia veľkosť kódu.
  1. Základný rozdiel medzi inline a makrom spočíva v tom, že kompilátor analyzuje inline funkcie, zatiaľ čo makrá v programe sú rozširované preprocesorom.
  2. Kľúčové slovo použité na definovanie inline funkcie je „v rade“Zatiaľ čo kľúčové slovo použité na definovanie makra je„#define“.
  3. Akonáhle je inline funkcia decalre vnútri triedy, môže byť definovaná buď vnútri triedy alebo mimo triedy. Na druhej strane, makro je vždy definované na začiatku programu.
  4. Argument odovzdaný do vložených funkcií sa pri kompilácii vyhodnotí iba raz, zatiaľ čo argument makra sa vyhodnocuje vždy, keď sa v kóde použije makro.
  5. Kompilátor nesmie inline a rozširovať všetky funkcie definované v triede. Na druhej strane, makrá sa vždy rozširujú.
  6. Krátka funkcia, ktorá je definovaná vo vnútri triedy bez vloženého kľúčového slova, sa automaticky vytvorí pomocou vložených funkcií. Na druhej strane by sa makro malo definovať osobitne.
  7. Funkcia, ktorá je vložená, má prístup k členom triedy, zatiaľ čo makro nemôže nikdy získať prístup k členom triedy.
  8. Na ukončenie inline funkcie je potrebná uzavretá zložená zátvorka, zatiaľ čo makro je ukončené začiatkom nového riadku.
  9. Ladenie sa stáva ľahšie pre inlne funkcie, pretože sa pri kompilácii kontroluje, či neobsahuje nejaké chyby. Na druhej strane, makro sa pri kompilácii nekontroluje, takže ladenie makra sa stáva ťažkým.
  10. Funkcia je inline funkcia, ktorá viaže svojich členov v počiatočných a uzavretých zložených zátvorkách. Na druhej strane, makro nemá žiadny symbol ukončenia, takže väzba sa stáva ťažšou, keď makro obsahuje viac ako jeden príkaz.

záver:

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