Ieteicams, 2024

Redaktora Izvēle

Starpība starp Inline un Macro C ++

Makro ir norādījums, kas izvēršas laikā, kad tas tiek aicināts. Var definēt arī funkcijas, piemēram, makro. Līdzīgi inline funkcijas paplašinās arī tās atsaukšanas brīdī. Viena no galvenajām atšķirībām starp inline un makro funkciju ir, ka inline funkcijas tiek paplašinātas kompilēšanas laikā, un makro tiek paplašināts, kad programmu apstrādā priekšapstrādātājs .

Pētīsim atšķirību starp inline un makro ar salīdzinājuma diagrammas palīdzību.

Salīdzinājuma diagramma

Salīdzinājuma pamatsRindāMakro
PamataInline funkcijas sastāda kompilators.Makro tiek paplašināts ar priekšapstrādātāju.
Sintakseinline return_type funct_name (parametri) {. . . }#define makro_nosaukums char_sequence
Lietotie atslēgvārdirindā
#define
DefinētsTo var definēt klasē vai ārpus tās.Tas vienmēr tiek definēts programmas sākumā.
NovērtējumsTas novērtē argumentu tikai vienu reizi.Tas novērtē argumentu katru reizi, kad to izmanto kodā.
PaplašināšanāsKompilators var neieviest un paplašināt visas funkcijas.Makro vienmēr tiek paplašināti.
AutomatizācijaKlases iekšienē definētās īsās funkcijas tiek automātiski izveidotas uz inline funkcijām.Makro būtu jādefinē konkrēti.
PiekļuveInline biedra funkcija var piekļūt klases dalībniekiem.Makro nekad nevar būt klases dalībnieki un nevar piekļūt klases dalībniekiem.
IzbeigšanaIekšējās funkcijas definīcija beidzas ar cirtainu iekavām inline funkcijas beigās.Makro definīcija beidzas ar jauno līniju.
AtkļūdošanaAtkļūdošana ir vienkārša inline funkcijai, jo kļūdu pārbaude tiek veikta kompilēšanas laikā.Atkļūdošana makro darbībai kļūst sarežģīta, jo kompilēšanas laikā kļūdas pārbaude nenotiek.
SaistošsInline funkcija sasaista visus paziņojuma elementus funkcijas funkcijā ļoti labi, kā funkcijas sākums un beidzas ar cirtainiem kronšteiniem.Makro saskaras ar saistošo problēmu, ja tai ir vairāk nekā viens paziņojums, jo tai nav beigu simbola.

Inline definīcija

Inline funkcija izskatās kā parasta funkcija, bet pirms tā ir atslēgvārds “ inline ”. Inline funkcijas ir īsa garuma funkcijas, kas tiek paplašinātas tā izsaukšanas vietā, nevis tiek izsauktas. Ar piemēru sapratīsim inline funkcijas.

 #include izmantojot namespace std; klases piemērs {int a, b; publiski: inline void inicializēt (int x, int y) {a = x; b = y} tukšs displejs () {cout << a << "" < 

Iepriekš minētajā programmā es deklarēju un definēju funkciju inicializāciju () kā inline funkciju klasē “piemērs”. Inicializācijas () funkcijas kods paplašinās, ja to izmantos klases „piemērs” objekts. Funkcijas displejs (), kas definēts klases piemērā, nav deklarēts inline, bet kompilators to var uzskatīt par nepareizu, jo C + + klasē definēto funkciju automātiski kompilē kompilators, ņemot vērā funkcijas garumu.

  • Iekšējā funkcija samazina funkciju izsaukšanas un atgriešanas pieskaitāmās izmaksas, kas savukārt samazina programmas izpildes laiku. Arī argumenti tiek stumti uz kaudze un reģistri tiek saglabāti, kad funkcija tiek izsaukta un atiestatīta, kad funkciju atgriešanās, kas aizņem laiku, to izvairās no iekšējām funkcijām, jo ​​nav nepieciešams izveidot vietējos mainīgos un formālos parametrus katru reizi. .
  • Inline funkcijas var būt klases dalībnieki un var piekļūt arī klases datu biedram.
  • Inline funkcija samazina programmas izpildes laiku, bet dažreiz, ja inline funkcijas garums ir lielāks, programmas lielums palielināsies arī dublētā koda dēļ. Līdz ar to ļoti labas prakses piemēri ir ļoti mazas funkcijas.
  • Inline funkcijas arguments tiek novērtēts tikai vienu reizi.

Makro definīcija

Makro ir “priekšapstrādes direktīva”. Pirms apkopošanas programma tiek pārbaudīta priekšapstrādes uzņēmumā, un, ja tā programmā atrod makro, tā šo makro aizstāj ar tās definīciju. Tādējādi makro tiek uzskatīts par “teksta aizvietošanu”. Pētīsim makro ar piemēru.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Lielāks no 10 un 20 ir" << GREATER ("20", "10") << "n"; atgriešanās 0; } 

Iepriekš minētajā kodā es paziņoju par makro funkciju GREATER (), kas salīdzina un atrod lielāku skaitu abu parametru. Jūs varat novērot, ka makro izbeigšanai nav semikola, jo makro pārtrauc tikai jaunā līnija. Tā kā makro ir tikai teksta aizstāšana, tas paplašinās makro kodu, kurā tas tiek izmantots.

  • Makro vienmēr tiek definēti lielajiem burtiem, lai programmētājiem būtu viegli identificēt visus programmas makro lasīšanas laikā.
  • Makro nekad nevar būt klases dalībnieka funkcija, un tā nevar piekļūt nevienas klases datu dalībniekiem.
  • Makro funkcija novērtē argumentu katru reizi, kad tā parādās tās definīcijā, kas rada neparedzētu rezultātu.
  • Makro ir jābūt mazāka izmēra, jo lielāki makroekonomiski palielinās koda lielumu.

Galvenās atšķirības starp inline un makro

  1. Galvenā atšķirība starp inline un makro ir tāda, ka kompilators apstrādā inline funkcijas, savukārt programmas makro paplašina priekšapstrādātājs.
  2. Atslēgvārds, ko izmanto, lai definētu inline funkciju, ir “ inline ”, bet atslēgvārds, ko izmanto makro definēšanai, ir “ #define ”.
  3. Kad inline funkcija ir dekalre klasē, to var definēt vai nu klasē, vai ārpus klases. No otras puses, makro vienmēr ir definēts programmas sākumā.
  4. Ar inline funkcijām nodotais arguments tiek novērtēts tikai vienu reizi, kamēr kompilācija tiek veikta, bet makro argumentu novērtē katru reizi, kad kodā tiek izmantots makro.
  5. Kompilators nedrīkst iekļauties un paplašināt visas klases ietvaros noteiktās funkcijas. No otras puses, makro vienmēr tiek paplašināti.
  6. Īsa funkcija, kas definēta klasē bez atslēgas vārda, tiek automātiski veidota. No otras puses, makro ir jādefinē konkrēti.
  7. Funkcija, kas ir inline, var piekļūt klases dalībniekiem, bet makro nekad nevar piekļūt klases locekļiem.
  8. Lai izbeigtu inline funkciju, ir nepieciešama slēgta cirtaini lencēm, bet makro tiek pārtraukta ar jaunas līnijas sākumu.
  9. Atkļūdošana kļuvusi vienkārša, jo tā tiek pārbaudīta kompilācijas laikā par jebkuru kļūdu. No otras puses, makro nav pārbaudīta kompilēšanas laikā, tāpēc makro atkļūdošana kļūst sarežģīta.
  10. Tā kā funkcija ir inline funkcija, tā dalībnieki ir saistoši sākumā un aizvērtas cirtaini bikšturi. No otras puses, makro nav beigu simbola, tāpēc saistība kļūst sarežģīta, ja makro satur vairāk nekā vienu paziņojumu.

Secinājumi:

Inline funkcijas ir daudz pārliecinošākas par makro funkciju. C ++ nodrošina arī labāku veidu, kā definēt konstantu, kas izmanto atslēgvārdu “const”.

Top