Ero rivin ja makron välillä C ++: ssa

Kirjoittaja: Laura McKinney
Luomispäivä: 2 Huhtikuu 2021
Päivityspäivä: 14 Saattaa 2024
Anonim
Ero rivin ja makron välillä C ++: ssa - Tekniikka
Ero rivin ja makron välillä C ++: ssa - Tekniikka

Sisältö


Makro on ohje, joka laajenee kutsuttaessaan. Toiminnot voidaan myös määritellä, kuten makroja. Samoin inline-toiminnot laajentuvat myös kutsumisessaan. Yksi ensisijainen ero inline- ja makrofunktion välillä on, että sisäiset toiminnot laajennetaan vuoden aikana kokoelma, ja makrot laajennetaan, kun ohjelma käsittelee ohjelmaa preprocessor.

Tarkastellaan rivin ja makron eroa vertailukaavion avulla.

  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. johtopäätös

Vertailutaulukko

Vertailun perusteetLinjassamakro
perustiedot Kääntäjä jäsentää sisäiset toiminnot.Esiprosessori laajentaa makroja.
Syntaksiinline return_type funct_name (parametrit) {. . . }#define macro_name char_sequence
Käytetyt avainsanatlinjassa
#määritellä
määritellytSe voidaan määritellä luokan sisällä tai ulkopuolella.Se määritetään aina ohjelman alussa.
arviointiSe arvioi väitteen vain kerran.Se arvioi argumentin joka kerta, kun sitä käytetään koodissa.
laajeneminen Kääntäjä ei välttämättä sisällä kaikkia toimintoja ja laajentaa niitä.Makroja laajennetaan aina.
automaatioLuokan sisällä määritellyt lyhyet toiminnot tehdään automaattisesti inline-toimintoiksi.Makrot tulisi määritellä erityisesti.
pääsyInline-jäsentoiminto voi käyttää luokan datajäseniä.Makrot eivät voi koskaan olla luokan jäseniä eivätkä pääse luokan tietojäseniin.
päättyminenInline-toiminnon määritelmä päättyy kiharakiinnikkeillä inline-toiminnon lopussa.Makron määritelmä päättyy uudella rivillä.
virheenkorjausVirheenkorjaus on helppo integroidulle toiminnolle, koska virheentarkistus tehdään kokoamisen aikana.Virheenkorjauksesta tulee vaikeaa makroilla, koska virheentarkistusta ei tapahdu käännöksen aikana.
sitovaInline-funktio sitoo kaikki funktion rungon lauseet erittäin hyvin, koska funktion runko alkaa ja päättyy kiharaan.Makro kohtaa sidontaongelman, jos sillä on useampi kuin yksi lause, koska siinä ei ole lopetussymbolia.


Määritelmä Inline

Inline-funktio näyttää tavalliselta funktiolta, mutta sitä edeltää avainsana “linjassa”. Inline-toiminnot ovat lyhyen pituisia funktioita, joita laajennetaan sen kutsumishetkellä kutsumisen sijasta. Ymmärretään sisäiset toiminnot esimerkillä.

#sisältää käyttämällä nimitilaa std; luokan esimerkki {int a, b; julkinen: inline void alustaa (int x, int y) {a = x; b = y} tyhjä näyttö () {cout << a << "" <

Yllä olevassa ohjelmassa ilmoitin ja määrittelin funktion alustaa () luokan ”esimerkki” rivitoimintoksi. Alustus () -toiminnon koodi laajenee, kun luokan "esimerkki" kohde sitä kutsuu. Luokan esimerkissä määriteltyä toimintanäyttöä () ei ilmoiteta inline: ksi, mutta kääntäjä voi pitää sitä inline: C ++: ssa luokan sisällä määritelty toiminto tehdään kääntäjälle automaattisesti integroituna funktion pituuden mukaan.


  • Inline-toiminto vähentää funktion soittamisen ja palauttamisen yleiskustannuksia, mikä puolestaan ​​lyhentää ohjelman suorittamisen aikaa.Lisäksi argumentit työnnetään pinolle ja rekisterit tallennetaan, kun funktiota kutsutaan, ja palautetaan, kun funktion palautus vie aikaa, tämä vältetään sisäisillä toiminnoilla, koska paikallisia muuttujia ja muodollisia parametreja ei tarvitse luoda joka kerta. .
  • Sisäiset toiminnot voivat olla luokan jäseniä ja käyttää myös luokan datajäsentä.
  • Inline-toiminto lyhentää ohjelman suorittamisaikaa, mutta joskus jos inline-toiminnon pituus on pidempi, myös ohjelman koko kasvaa kopioidun koodin takia. Siksi on hyvä käytäntö upottaa hyvin pieniä toimintoja.
  • Inline-toiminnon argumentti arvioidaan vain kerran.

Määritelmä Makro

Makro on ”esikäsittelydirektiivi”. Ennen kompilointia esikäsittelijä tutkii ohjelman ja aina kun se löytää makron ohjelmasta, se korvaa sen makro määritelmällä. Siksi makroa pidetään ”korvaavana”. Tutkitaan makro esimerkillä.

#sisältää #define GREATER (a, b) ((a <b)? b: a) int main (tyhjä) {cout << "10 ja 20 suurempi on" << GREATER ("20", "10") << " n"; paluu 0; }

Yllä olevassa koodissa ilmoitin makrofunktion GREATER (), joka vertaa ja löytää suuremman määrän molempia parametreja. Voit huomata, että makron lopettamiseen ei ole puolipistettä, koska makro lopetetaan vain uudella rivillä. Koska makro on vain korvike, se laajentaa makron koodia, johon se otetaan käyttöön.

  • Makrot on aina määritelty isoilla kirjaimilla, jotta ohjelmoijien on helppo tunnistaa kaikki ohjelman makrot lukemisen aikana.
  • Makro ei voi koskaan olla luokan jäsentoiminto, eikä se voi käyttää minkään luokan tietojäseniä.
  • Makrofunktio arvioi argumentin joka kerta, kun se esiintyy määritelmässä, mikä johtaa odottamattomaan tulokseen.
  • Makron on oltava kooltaan pienempi, koska suuret makrot lisäävät tarpeettomasti koodin kokoa.
  1. Perusero rivin ja makron välillä on se, että kääntäjä jäsentää rivin funktiot, kun taas esikäsittelyohjelma laajentaa ohjelman makroja.
  2. Sisäisen funktion määrittämiseen käytetty avainsana on “linjassa"Taas makron määrittelemiseen käytetty avainsana on"#määritellä“.
  3. Kun inline-toiminto on desimaali luokan sisällä, se voidaan määritellä joko luokan sisällä tai luokan ulkopuolella. Toisaalta makro määritetään aina ohjelman alussa.
  4. Inline-funktioille siirretty argumentti arvioidaan vain kerran kokoamisen aikana, kun taas makroargumentti arvioidaan aina, kun makroa käytetään koodissa.
  5. Kääntäjä ei saa sisällyttää kaikkia luokan sisällä määriteltyjä toimintoja ja laajentaa niitä. Toisaalta makroja laajennetaan aina.
  6. Lyhyet funktiot, jotka määritetään luokan sisällä ilman inline-avainsanaa, tehdään automaattisesti inline-funktioiksi. Toisaalta makro tulisi määritellä erityisesti.
  7. Inline-toiminto voi käyttää luokan jäseniä, kun taas makro ei voi koskaan käyttää luokan jäseniä.
  8. Inline-toiminnon lopettamiseksi vaaditaan suljettu kihara-aukko, kun taas makro lopetetaan uuden rivin alkaessa.
  9. Virheenkorjauksesta tulee helppoa inlne-toiminnossa, koska se tarkistetaan kokoamisen aikana virheiden varalta. Toisaalta makroa ei tarkisteta kokoamisen aikana, joten makron virheenkorjaus on vaikeaa.
  10. Funktiona sisäinen toiminto sitoo jäsenet aloitus- ja suljettuihin kiharaan. Toisaalta makroilla ei ole mitään lopetussymbolia, joten sitominen tulee vaikeaksi, kun makro sisältää enemmän kuin yhden lauseen.

johtopäätökset:

Inline-toiminnot ovat paljon vakuuttavampia kuin makro-funktiot. C ++ tarjoaa myös paremman tavan määritellä vakio, joka käyttää “const” -sanaa.