Проучимо разлику између инлине и макроа помоћу табеле упоређивања.
Цомпарисон Цхарт
Основа за поређење | У реду | Макро |
---|---|---|
Басиц | Инлине функције су анализиране од стране компајлера. | Макрои су проширени препроцесором. |
Синтакса | инлине ретурн_типе фунцт_наме (параметри) {. . . } | #дефине мацро_наме цхар_секуенце |
Кеивордс Усед | у реду | #дефинисати |
Дефинисано | Може се дефинисати унутар или изван класе. | Увек се дефинише на почетку програма. |
Евалуација | Он аргументе процењује само једном. | Он вреднује аргумент сваки пут када се користи у коду. |
Екпансион | Компајлер можда неће уградити и проширити све функције. | Макрои се увек проширују. |
Аутоматион | Кратке функције, дефинисане унутар класе, аутоматски се уносе у инлине функције. | Макрое треба посебно дефинисати. |
Приступ | Функција инлине члана може приступити члановима података класе. | Макрои никада не могу бити чланови класе и не могу приступити члановима података класе. |
Прекид | Дефиниција инлине функције завршава са увијеним заградама на крају инлине функције. | Дефиниција макроа завршава се новом линијом. |
Дебуггинг | Отклањање грешака је лако за инлине функцију јер се провера грешака врши током компилације. | Отклањање грешака постаје тешко за макрое јер се проверавање грешака не дешава током компилације. |
Биндинг | Функција инлине повезује све изјаве у телу функције веома добро као и тело функције и завршава се увијеним заградама. | Макро је суочен са проблемом везивања ако има више од једног израза, пошто нема терминацијског симбола. |
Дефиниција Инлине-а
Инлине функција изгледа као регуларна функција, али јој претходи кључна реч " инлине ". Инлине функције су функције кратке дужине које се проширују у тренутку његовог позивања, уместо да се позивају. Хајде да разумемо инлине функције са примером.
#инцлуде усинг намеспаце стд; пример класе {инт а, б; публиц: инлине воид иницијализује (инт к, инт и) {а = к; б = и} воид дисплаи () {цоут << а << "" <У горе наведеном програму, декларисао сам и дефинисао, иницијализација функције (), као инлине функцију у класи "пример". Код функције иницијализације () ће се проширити тамо где је позван од стране објекта класе “пример”. Функција дисплаи (), дефинисана у примеру класе није декларисана инлине, али се може сматрати инлине од стране компајлера, као у Ц ++ функција дефинисана унутар класе аутоматски је направљена од стране компајлера с обзиром на дужину функције.
- Функција инлине смањује оптерећење функције позива и враћања што смањује вријеме извршења програма. Такође, аргументи се гурају на стог и регистри се чувају када се функција позове и ресетује када се функција врати, што захтева време, то се избегава инлине функцијама јер нема потребе за прављењем локалних променљивих и формалних параметара сваки пут. .
- Инлине функције могу бити чланови класе и такође могу приступити члану класе класе.
- Инлине функција смањује време извођења програма, али понекад, ако је дужина инлине функције већа онда ће се и величина програма повећати због дуплицираног кода. Стога је добра пракса уградити врло мале функције.
- Аргумент инлине функције се процењује само једном.
Дефиниција макроа
Макро је "директива за процесоре". Пре компилације, програм се прегледава од стране претпроцесора и где год пронађе макро у програму, он замењује тај макро својом дефиницијом. Дакле, макро се сматра “заменом текста”. Проучимо макро са примером.
#инцлуде #дефине ГРЕАТЕР (а, б) ((а <б)? б: а) инт маин (воид) {цоут << "Греатер оф 10 анд 20 ис" << ГРЕАТЕР ("20", "10") << "\ т ретурн 0; }
У горњем коду сам декларисао макро функцију ГРЕАТЕР (), која упоређује и проналази већи број оба параметра. Можете приметити да не постоји тачка-зарез да би се макро окончао пошто се макро завршава само новом линијом. Како је макро само замена текста, он ће проширити код макроа где се позива.
- Макрои су увек дефинисани великим словима само да би програмери могли лакше да идентификују све макрое у програму док читају.
- Макро никада не може бити функција члана класе, нити може приступити члановима података било које класе.
- Макро функција процењује аргумент сваки пут када се појави у својој дефиницији што резултира неочекиваним резултатом.
- Макро мора бити мање величине јер ће већи макрои непотребно повећати величину кода.
Кључне разлике између инлине и макроа
- Основна разлика између инлине и макроа је у томе што је компајлер анализирао инлине функције, док су макрои у програму проширени претпроцесором.
- Кључна реч која се користи за дефинисање инлине функције је " инлине ", док је кључна реч која се користи за дефинисање макроа " #дефине ".
- Једном када је инлине функција декалирана унутар класе, она се може дефинисати или унутар класе или изван класе. С друге стране, макро је увек дефинисан на почетку програма.
- Аргумент прослеђен инлине функцијама евалута је само једном док компилација, док је макрос аргумент вреднован сваки пут када се макро користи у коду.
- Компајлер не може уградити и проширити све функције дефинисане унутар класе. С друге стране, макрои се увек проширују.
- Кратка функција која је дефинисана унутар класе без инлине кључне речи аутоматски се праве инлине функције. С друге стране, Макро би требало конкретно дефинисати.
- Функција која је инлине може приступити члановима класе, док макро никада не може приступити члановима класе.
- Да бисте прекинули инлине функцију, потребна је затворена закривљена заграда, док је макро завршен са почетком нове линије.
- Отклањање грешака постаје лако за инлне функције јер се провјерава током компилације за било коју грешку. С друге стране, макро није провјерен за вријеме компилације, тако да дебагирање макроа постаје тешко.
- Као функција, функција инлине повезује своје чланове унутар старта и затвара витичасте заграде. С друге стране, макро нема икакав прекидни симбол, тако да везивање постаје тешко када макро садржи више од једне изјаве.
Закључци:
Инлине функције су много увјерљивије од макро функције. Ц ++ такође пружа бољи начин за дефинисање константе, која користи “цонст” кључну реч.