Pozrite sa na rozdiel medzi inline a makro pomocou porovnávacieho grafu.
Porovnávacia tabuľka
Základ pre porovnanie | V rade | makro |
---|---|---|
základné | Inline funkcie sú analyzované kompilátorom. | Makrá sú rozširované preprocesorom. |
syntax | inline return_type funct_name (parametre) {., , } | #define názov_programu macro_name char_sequence |
Použité kľúčové slová | v rade | #define |
definovaný | Môže sa definovať vo vnútri alebo mimo triedy. | Je to vždy definované na začiatku programu. |
ohodnotenie | Hodnotí argument iba raz. | Hodnotí argument pri každom použití 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 vykonajú na inline funkcie. | Makrá by mali byť definované konkrétne. |
prístup | Funkcia vložených členov môže pristupovať k údajovým členom triedy. | Makrá nemôžu byť členmi triedy a nemôžu pristupovať k údajovým členom triedy. |
ukončenie | Definícia inline funkcie končí zakrivenými zátvorkami na konci inline funkcie. | Definícia makra končí s novým riadkom. |
ladenie | Ladenie je jednoduché pre inline funkcie, pretože kontrola chýb sa vykonáva počas kompilácie. | Ladenie je pre makrá ťažké, pretože pri kompilácii nedochádza k kontrole chýb. |
viazanie | Funkcia inline viaže všetky vyhlásenia v tele funkcií veľmi dobre, ako telo funkcie začína a končí zakrivenými zátvorkami. | Makro čelí probléme viazania, ak má viac ako jedno vyhlásenie, pretože nemá žiadny symbol ukončenia. |
Definícia inline
Inline funkcia vyzerá ako bežná funkcia, ale predchádza kľúčové slovo " inline ". Inline funkcie sú funkcie krátkej dĺžky, ktoré sa rozširujú v mieste jeho vyvolania namiesto toho, aby boli volané. Poďme chápať inline funkcie s príkladom.
# include using namespace std; Príklad triedy {int a, b; verejné: inline void inicializovať (int x, int y) {a = x; b = y} prázdny displej () {cout << a << "" <Vo vyššie uvedenom programe som vyhlásil a definoval inicializáciu funkcie () ako inline funkciu v triede "example". Kód funkcie inicializácie () sa rozširuje tam, kde je vyvolaný objektom "príkladu" triedy. Funkcia display (), definovaná v príklade triedy, nie je deklarovaná inline, ale môže ju považovať za inline zo strany kompilátora, pretože v C ++ sa funkcia definovaná vo vnútri triedy automaticky dopracuje kompilátorom podľa dĺžky funkcie.
- Inline funkcia znižuje režijné náklady na volanie a návrat funkcií, čo znižuje dobu realizácie programu. Tiež sú argumenty tlačené na zásobník a registre sú uložené, keď sa funkcia volá a vynuluje, keď sa funkcia vráti, čo trvá dlhšie, to sa vyhnú inline funkcii, pretože nie je potrebné vytvárať lokálne premenné a formálne parametre zakaždým,
- Inline funkcie môžu byť členom triedy a môžu tiež pristupovať k dátovému členovi triedy.
- Funkcia Inline znižuje čas vykonania programu, ale niekedy ak je dĺžka inline funkcie väčšia, veľkosť programu sa tiež zvýši z dôvodu duplicitného kódu. Preto je dobrým postupom vložiť veľmi malé funkcie.
- Argument inline funkcie sa hodnotí iba raz.
Definícia makra
Makro je "smernica preprocesorov". Pred kompiláciou je program preskúmaný preprocesorom a tam, kde niekedy nájde makro v programe, nahradí toto makro podľa jeho definície. Z tohto dôvodu sa makro považuje za "výmenu textu". Pozrime sa na makro s príkladom.
#include #define VEĽKOSŤ (a, b) ((a <b)? b: a) int main (void) {cout << "Väčší 10 a 20 je << << GREATER (" 20 ", " 10 ") << "" \ n "; návrat 0; }
Vo vyššie uvedenom kóde sme deklarovali makrofunkciu GREATER (), ktorá porovnáva a nájde väčší počet oboch parametrov. Môžete pozorovať, že nie je žiadna bodkočiarka na ukončenie makra, pretože makro je ukončené iba novým riadkom. Keďže makro je práve výmena textu, rozšíri sa kód makra tam, kde je vyvolaný.
- Makrá sú vždy definované veľkými písmenami, aby mohli programátori ľahko identifikovať všetky makrá v programe pri čítaní.
- Makro nemôže byť členskou funkciou triedy, ani nemôže pristupovať k údajovým členom akejkoľvek triedy.
- Funkcia makra vyhodnotí argument vždy, keď sa objaví vo svojej definícii, čo vedie k neočakávanému výsledku.
- Makro musí mať menšiu veľkosť, pretože väčšie makrá zbytočne zväčšia veľkosť kódu.
Kľúčové rozdiely medzi inline a makro
- Základný rozdiel medzi inline a makro je, že inline funkcie sú analyzované kompilátorom, zatiaľ čo makrá v programe sú rozširované preprocesorom.
- Kľúčové slovo používané na definovanie vloženej funkcie je " inline ", zatiaľ čo kľúčové slovo používané na definovanie makra je " #define ".
- Keď je inline funkcia decalre vo vnútri triedy, môže byť definovaná buď vo vnútri triedy alebo mimo triedy. Na druhej strane makro je vždy definované na začiatku programu.
- Argument odovzdaný do inline funkcií sa hodnotí iba raz pri kompilácii, zatiaľ čo argumenty makier sa vyhodnocujú pri každom použití makra v kóde.
- Kompilátor nesmie inline a rozšíriť všetky funkcie definované v rámci triedy. Na druhej strane sa makrá vždy rozširujú.
- Krátke funkcie, ktoré sú definované v rámci triedy bez kľúčového slova, sú automaticky vytvorené inline funkcie. Na druhej strane, makro by malo byť definované konkrétne.
- Funkcia, ktorá je inline, môže pristupovať k členom triedy, zatiaľ čo makro nemôže nikdy pristupovať k členom triedy.
- Ak chcete ukončiť inline funkciu, je potrebná uzatvorená kučeravá výstuž, zatiaľ čo makro je ukončené začiatkom novej čiary.
- Ladenie sa stáva jednoduché pre funkciu inlne, pretože sa pri kompilácii skontroluje akákoľvek chyba. Na druhej strane makro nie je kontrolované pri kompilácii, takže ladenie makra sa stáva ťažké.
- Funkciou je inline funkcia viazanie jej členov v začiatku a zatvorené kučeravé ramená. Na druhej strane, makro nemá žiadny symbol ukončenia, takže väzba sa stáva ťažkou, ak makro obsahuje viac ako jedno vyhlásenie.
záver:
Inline funkcie sú oveľa presvedčivejšie ako funkcie makier. C ++ tiež poskytuje lepší spôsob definovania konštanta, ktorá používa kľúčové slovo "const".