Рецоммендед, 2024

Избор Уредника

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

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

Проучимо разлику између инлине и макроа помоћу табеле упоређивања.

Цомпарисон Цхарт

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

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

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

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

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

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

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

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

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

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

  • Макрои су увек дефинисани великим словима само да би програмери могли лакше да идентификују све макрое у програму док читају.
  • Макро никада не може бити функција члана класе, нити може приступити члановима података било које класе.
  • Макро функција процењује аргумент сваки пут када се појави у својој дефиницији што резултира неочекиваним резултатом.
  • Макро мора бити мање величине јер ће већи макрои непотребно повећати величину кода.

Кључне разлике између инлине и макроа

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

Закључци:

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

Top