Разлика између инлине и макроа у Ц ++

Аутор: Laura McKinney
Датум Стварања: 2 Април 2021
Ажурирати Датум: 16 Може 2024
Anonim
Агрогороскоп выращивания капусты в 2022 году
Видео: Агрогороскоп выращивания капусты в 2022 году

Садржај


Макро је упутство које се проширује у тренутку његовог позива. Функције се такође могу дефинисати као макрои. Слично томе, инлине функције се такође проширују на месту њеног позива. Једна главна разлика између инлине и макро функције је та инлине функције су у току компилација, и макрои се проширују када програм обрађује предпроцесор.

Проучимо разлику између инлине и макронаредбе уз помоћ упоредног графикона.

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Закључак

Упоредни графикон

Основе за упоређивањеУ редуМакро
Основни Инлине функције компајлер рашчлањује.Препроцесор проширује макронаредбе.
Синтаксаинлине ретурн_типе фунцт_наме (параметри) {. . . }#дефине макро_име цхар_секуенце
Коришћене кључне речиу реду
#дефинисати
ДефинисанМоже се дефинисати унутар или изван класе.Увек је дефинисан на почетку програма.
ПроценаАргумент процењује само једном.Она вреднује аргумент сваки пут када се користи у коду.
Проширење Компајлер можда не укључује и проширује све функције.Макрои су увек проширени.
АутоматизацијаКратке функције, дефинисане унутар класе, аутоматски се извршавају на уграђеним функцијама.Макрое треба посебно дефинисати.
ПриступањеФункција уграђених чланова може приступити члановима података класе.Макрои никада не могу бити чланови класе и не могу приступити подацима чланова класе.
ПрекидДефиниција инлине функције завршава се коврчавим заградама на крају инлине функције.Дефиниција макронаредбе завршава новом линијом.
Отклањање грешакаОтклањање погрешака је једноставно за уграђену функцију, јер се провера грешака врши током компилације.Отклањање погрешака постаје тешко за макронаредбе јер се не врши провера грешака током компилације.
ВезивањеИнлине функција врло добро веже све исказе у телу функције, као и тело функције које започиње и завршава са коврчавим заградама.Макро се суочава са проблемом везања ако има више од једне изјаве, јер нема симбол завршетка.


Дефиниција Инлине-а

Инлине функција изгледа као редовна функција, али јој претходи кључна реч „у реду“. Инлине функције су функције кратке дужине које се проширују на месту њеног позива, уместо да се зову. Да разумемо инлине функције са примером.

#инцлуде користећи намеспаце стд; пример класе {инт а, б; публиц: инлине инид воид Инитиализе (инт к, инт и) {а = к; б = и} воид дисплаи () {цоут << а << "" <

У горњем програму сам декларирао и дефинирао функцију иницијализирати (), као инлине функцију у класи „примјер“. Код функције иницијализације () проширит ће се тамо гдје је на њега позвао објект класе "екампле". Приказ функције (), дефиниран у примјеру класе, није декларисан инлине, али компајлер га може сматрати инлине у Ц ++ функцију дефинисану унутар класе аутоматски саставља инлине од стране компајлера узимајући у обзир дужину функције.


  • Инлине функција смањује режијске трошкове позивања и враћања функције што заузврат смањује време извршења програма.Такође, аргументи се гурају у стог и регистри се спремају када се функција позва и ресетира када се функција врати, за што је потребно време, то инлине функције избегавају, јер нема потребе за креирањем локалних променљивих и формалних параметара сваки пут .
  • Инлине функције могу бити члан класе и такође могу приступити члану података класе.
  • Инлине функција смањује време извршења програма, али, понекад ако је дужина инлине функције већа, тада се и величина програма повећава због дуплираног кода. Стога је добра пракса уградити веома мале функције.
  • Аргумент инлине функције процењује се само једном.

Дефиниција макроа

Макро је „директива за процесоре“. Пре компилације програм прегледа прецесор и где год он нађе макро у програму, он га замењује дефиницијом. Стога се макро сматра „заменом“. Проучимо макро на примеру.

#инцлуде #дефине ГРЕАТЕР (а, б) ((а <б)? б: а) инт маин (воид) {цоут << "Више од 10 и 20 је" << ГРЕАТЕР ("20", "10") << " н"; ретурн 0; }

У горњем коду, најавио сам макро функцију ГРЕАТЕР (), која упоређује и проналази већи број оба параметра. Можете приметити да не постоји тачка под зарезом која би прекинула макронаредбу, јер макронаредба прекида само нови ред. Како је макронаредба само замена, он ће проширити код макронаредбе тамо где се позива.

  • Макрои су увек дефинисани великим словима како би програмерима олакшали препознавање свих макронаредби у програму док читају.
  • Макро никада не може бити функција члана класе нити може приступити члановима података било које класе.
  • Макро функција вреднује аргумент сваки пут када се појави у његовој дефиницији, што резултира неочекиваним резултатом.
  • Макро мора бити мање величине јер ће већи макрои непотребно повећавати величину кода.
  1. Основна разлика између инлине и макроа је у томе што компајлер раставља инлине функције док макрое у програму проширује процесор.
  2. Кључна реч која се користи за дефинисање инлине функције је „у реду„Док је кључна реч која се користи за дефинисање макроа“#дефинисати“.
  3. Једном када је инлине функција декаллирана унутар класе, она се може дефинирати било унутар класе или изван класе. С друге стране, макро је увек дефинисан на почетку програма.
  4. Аргумент пренесен у инлине функције оцењује се само једном током компилације, док се аргумент макронаредби процењује сваки пут када се у коду користи макро.
  5. Компајлер не може уградити и проширити све функције дефинисане унутар класе. С друге стране, макрои су увек проширени.
  6. Кратке функције које су дефиниране унутар класе без инлине кључне ријечи аутоматски се израђују у редним функцијама. С друге стране, макро треба посебно дефинисати.
  7. Инлине функција може приступити члановима класе док макро никада не може приступити члановима класе.
  8. За прекид инлине функције потребна је затворена коврчава заграда, а макронаредба се прекида са почетком нове линије.
  9. Отклањање погрешака постаје једноставно за интерну функцију јер се током компилације проверава да ли постоји било каква грешка. С друге стране, макро се не проверава током компилације, па дебаговање макроа постаје тешко.
  10. Будући да је функција, инлине функција везује своје чланове у почетним и затвореним коврчавим завојима. С друге стране, макрои немају никакав симбол завршавања, па везање постаје тешко кад макро садржи више од једне изјаве.

Закључци:

Инлине функције су далеко убедљивије од макро функције. Ц ++ такође пружа бољи начин за дефинисање константе, која користи кључну реч „цонст“.